লিনিয়ার সমীকরণের একটি সিস্টেম সমাধান করুন


12

যতটা সম্ভব সংক্ষিপ্ত রৈখিক সমীকরণের একটি সিরিজ সমাধান করার জন্য একটি প্রোগ্রাম লিখুন। এটি অবশ্যই ইচ্ছামত সংখ্যক সমীকরণের সমস্যার সমাধান করবে। আপনার পছন্দ মতো এগুলি ইনপুট করা যেতে পারে, বর্ধিত ম্যাট্রিক্সের সহগগুলি সম্ভবত সবচেয়ে সহজ। প্রোগ্রামটি অ-পূর্ণসংখ্যার সহগ বা সমাধানগুলি পরিচালনা করতে হয় না। কোন অধঃপতিত বা অবৈধ মামলা পরীক্ষা করা হবে না। প্রোগ্রামটি অবশ্যই প্রতিটি পরিবর্তনশীল বা হ্রাসকৃত সারি ইচেলন ফর্মের মান আউটপুট করে।

কোনও সমীকরণ সমাধানের পাঠাগার, ম্যাট্রিক্স ফাংশন, বা স্বয়ংক্রিয়ভাবে সমাধান করার কোনও উপায় অনুমোদিত নয়। আপনি অ্যারে বা তালিকার সাহায্যে ম্যাট্রিকগুলি অনুকরণ করতে পারেন।

উদাহরণ ইনপুট (বা সমতুল্য):

m={{2,1,-1,8},{-3,-1,2,-11},{-2,1,2,-3}}

এটি প্রতিনিধিত্ব করে 2x+y-z=8, -3x-y+2z=-11, -2x+y+2z=-3

উদাহরণ আউটপুট (বা সমতুল্য):

{2,3,-1}

এটি প্রতিনিধিত্ব করে x=2, y=3, z=-1


2
ভেরিয়েবলের সহগ এবং ধ্রুবক পদগুলি ইনপুটটিতে দুটি অ্যারেতে পৃথক করা যায়?
ব্যবহারকারী 12205

@ তবে হ্যাঁ, ভাল
কিউউআর

1
অবনমিত মামলায় আপনি ঠিক কী বলছেন? আমি অনুমান করি আপনি সেই সমস্ত মামলার প্রতি উল্লেখ করছেন: 1) ত্রুটিযুক্ত ইনপুট; 2) মত জিনিস 0x=0বা 0x=5; 4) ক্ষেত্রে যেখানে সমীকরণের সংখ্যা ভেরিয়েবলের সংখ্যার চেয়ে পৃথক; 5) মতবিরোধী মামলা যেমন x+5y=7, x+5y=8; 6) লিনিয়ার স্বতন্ত্রতা ছাড়া ক্ষেত্রে, পছন্দ x+3y=6, 2x+6y=12। আমি কি সঠিক?
ভিক্টর স্টাফুসা

@ ভিক্টর হ্যাঁ, যে কোনও ইনপুট যার কোনও অস্পষ্টতা বা সমাধানযোগ্য নয়।
Qwr

যেসব মামলা ক্ষয়িষ্ণু নয় বরং অসুস্থ শর্তযুক্ত সেগুলি সম্পর্কে কী বলা যায়? (বা, অন্য কথায়, কী ধরণের পাইভোটিং প্রয়োজন?)
পিটার টেলর

উত্তর:


3

পাইথন 169 166

বাস্তবায়ন

def s(a):
 if a:b=a[0];r=s([[x-1.*y*b[0]/r[0]for x,y in zip(b[1:],r[1:])]for r in a[1:]]);return[round((b[-1]-sum(x*y for x,y in zip(b[1:-1],r)))/b[0])]+r
 return[]

ডেমো

>>> arr=[[2, 1, -1, 8], [-3, -1, 2, -11], [-2, 1, 2, -3]]
>>> s(arr)
[2.0, 3.0, -1.0]

বিঃদ্রঃ

যদি আপনি ভাসমান আনুমানিকতার সাথে ঠিক থাকেন তবে আপনি রাউন্ড ফাংশন কলটি সরিয়ে 159 টি অক্ষরে আরও গল্ফ সরিয়ে নিতে পারেন


9

এপিএল, 1 চর

আমি জানি এটি (সংশোধিত) প্রয়োজনীয়তার সাথে খাপ খায় না, তবে পোস্ট করা ভাল না:

সিম্বল "ডোমিনো" ( ÷একটি আয়তক্ষেত্রের অভ্যন্তরে বিভাগ ) ম্যাট্রিক্স বিভাগ সম্পাদন করে, সুতরাং এটি লিনিয়ার সমীকরণের যে কোনও সিস্টেমকে সমাধান করতে পারে। আপনাকে কেবল অন্যান্য শর্তাদি সহ ধ্রুবক মেয়াদ ভেক্টর এবং ম্যাট্রিক্সের মধ্যে রাখতে হবে:

      8 ¯11 ¯3 ⌹ ⊃(2 1 ¯1)(¯3 ¯1 2)(¯2 1 2)
2 3 ¯1

(আপনি যদি ট্রাইএপল এ চেষ্টা করতে চান তবে )


4

জাভাস্ক্রিপ্ট ( 284 181) - গাউস নির্মূল পদ্ধতি

function f(A){l=A.length;d=1;for(i=0;i+1;i+=d){v=A[i][i];for(k=0;k<l+1;k++)A[i][k]/=v;for(j=i+d;A[j];j+=d)for(k=0,w=A[j][i];k<l+1;k++)A[j][k]-=w*A[i][k];if(i==l-d)d=-1,i=l}return A}

পরীক্ষা

f([[2,1,-1,8],[-3,-1,2,-11],[-2,1,2,-3]]);

=> [[1,0,0,2],[0,1,0,3],[-0,-0,1,-1]]

ফিরে আসা অ্যারে সনাক্তকরণ ম্যাট্রিক্স এবং সমাধান একত্রিত করে।


আপনি আরও কয়েকটি অক্ষর সংরক্ষণ করতে পারেন।
মার্সিনজুরাজেক

পরিবর্তে l=A.length;for(i=0;i<l;i++)ব্যবহার for(i=0;i<l=A.length;i++)
ভিক্টর স্টাফুসা

পরিবর্তে for(i=l-1;i>=0;i--)ব্যবহার for(i=l;--i;)
ভিক্টর স্টাফুসা

এছাড়াও আপনি স্থানান্তর করতে পারেন w=A[j][i]মধ্যে for()এবং থামিয়া {}প্রায়।
মার্সিনজুরাজেক

সবাইকে ধন্যবাদ, আমি এক ধাপে সামনের দিকে এবং পিছনের পদক্ষেপগুলিকে একীভূত করতে পরিচালিত করেছি, একশ অক্ষর সংরক্ষণ করেছি এবং আপনার কয়েকটি টিপস আর বৈধ নয়। (@ মার্সিন জুরাসেক্ক টিপ ব্যতীত)
মাইকেল এম।

3

এই উত্তরটি আর কোনও নিয়ম পরিবর্তনের পরে প্রশ্নটির সাথে খাপ খায় না কারণ এটি একটি ম্যাট্রিক্স ফাংশন ব্যবহার করে। *

Ageষি , 32

~matrix(input())*vector(input())

নমুনা ইনপুট:

[[2, 1, -1], [-3, -1, 2], [-2, 1, 2]]
[8, -11, -3]

নমুনা আউটপুট:

(2, 3, -1)

* যুক্তিযুক্তভাবে, matrix()একটি টাইপকাস্ট, কোনও ফাংশন নয় (চলমান import types; isinstance(matrix, types.FunctionType)দেয় False)। এছাড়াও, ~এবং *হয় অপারেটার না ফাংশন।


আমি নিয়ম আপডেট করেছি। কোডটিতে অবশ্যই বিভিন্ন সংখ্যক সমীকরণ হ্যান্ডেল করা উচিত এবং আপনি এখন ম্যাট্রিক্স ফাংশন ব্যবহার করতে পারবেন না।
Qwr

3

জাভা - 522 434 228 213 অক্ষর

নিয়মিতভাবে সমস্ত সম্ভাব্য পূর্ণসংখ্যার এন-টিপলস সরাসরি গুনে পরীক্ষা করে সমাধান করা হয় যতক্ষণ না কোনও কাজ করে এটির কাজ খুঁজে পাওয়া যায়।

ফাংশনটি ইনপুট হিসাবে মেট্রিক্স, এ, ট্রায়াল সলিউশন ভেক্টর, এক্স, এবং মাত্রা, এন গ্রহণ করে - আউটপুট সলিউশন ভেক্টর, এক্স। নোট করুন যে ভেক্টর এক্স সম্ভাব্য সমাধানগুলির মধ্য দিয়ে পদক্ষেপে সহায়তা করার জন্য আসলে মাত্রা থেকে একটি বড়। (আমি যদি ভেরিয়েবল এ, এক্স, এন, জে, কে, সকে উদাহরণ ভেরিয়েবল হিসাবে ঘোষণা করি তবে ফাংশনটি 31 টি সংক্ষিপ্ত হবে - মোট 182 এর জন্য, তবে এটি নিয়মগুলি খুব দূরে বাঁকানোর মতো অনুভব করে))

int[]Z(int[][]A,int[]x,int n){int j,k,s;for(;;){for(j=0;j<n;j++){for(k=s=0;k<n;s+=A[j][k]*x[k++]);if(s!=A[j][n])j+=n;}if(j==n)return x;for(j=0;j<=n;j++)if(x[j]!=x[n]||j==n){x[j]++;for(k=0;k<j;x[k++]=-x[n]);j=n;}}}

পরীক্ষার জন্য প্রোগ্রাম (কিছুটা নাড়িত):

import java.util.*;
class MatrixSolver{
    public MatrixSolver() {
        Scanner p=new Scanner(System.in); //initialize everything from stdin
        int j,k,n=p.nextInt(),A[][]=new int[n][n+1],x[]=new int[n+1];
        for(j=0;j<n;j++)for(k=0;k<=n;A[j][k++]=p.nextInt());
        x=Z(A,x,n); //call the magic function
        for(j=0;j<n;j++) System.out.print(x[j]+" "); //print the output
    }
    public static void main(String[]args){
        new MatrixSolver();
    } 

    int[]Z(int[][]A,int[]x,int n){
        int j,k,s;
        for(;;){
            for(j=0;j<n;j++){ //multiply each row of matrix by trial solution and check to see if it is correct
                for(k=s=0;k<n;s+=A[j][k]*x[k++]);
                if(s!=A[j][n])j+=n;
            }
            if(j==n)return x; //if it is correct return the trial solution
            for(j=0;j<=n;j++)if(x[j]!=x[n]||j==n){//calculate the next trial solution
                x[j]++;
                for(k=0;k<j;x[k++]=-x[n]);
                j=n;
            }
        }
    }
}

প্রোগ্রামটি পৃথক পৃথক পূর্ণসংখ্যা হিসাবে স্টিডিন থেকে ইনপুট নেয়: প্রথমত, সমস্যার মাত্রা, দ্বিতীয়ত, সারি অনুসারে অগমেন্ট্টড ম্যাট্রিক্সের এন্ট্রি।

নমুনা রান:

$java -jar MatrixSolver.jar
3 2 1 -1 8 -3 -1 2 -11 -2 1 2 -3
2 3 -1 

লুপস এবং "পাবলিক" সম্পর্কে ভিক্টরের পরামর্শ অনুসরণ করে, আলাদাভাবে পরিবর্তে পরিবর্তিত ম্যাট্রিক্সে আরএইচএস সংরক্ষণ করে এবং প্রতিটি নতুন পরীক্ষার সমাধানের জেনারেশনকে সহজতর করার জন্য আমার ট্রায়াল সলিউশনে একটি অতিরিক্ত এন্ট্রি যুক্ত করে আমি বেশ কয়েকটি চরিত্র কামিয়েছি। ওপি আরও বলেছিল যে একটি ফাংশন যথেষ্ট - পুরো প্রোগ্রামটি গণনা করার দরকার নেই।


while(true){f=0;for(j=0;j<n;j++)দ্বারা প্রতিস্থাপন করা যেতে পারে while(true){for(f=j=0;j<n;j++)। আপনার ক্লাসটি সর্বজনীন হওয়ার দরকার নেই। দেহে শুধুমাত্র একটি নির্দেশাবলী সহ লুপগুলির জন্য কোঁকড়া-ধনুর্বন্ধনী প্রয়োজন হয় না।
ভিক্টর স্টাফুসা

আমি মনে করি এটি for(j=0;j<n;j++){for(k=0;k<n;k++){A[j][k]=p.nextInt();}b[j]=p.nextInt();}প্রতিস্থাপন করা যাবেfor(j=0;j<n;b[j++]=p.nextInt())for(k=0;k<n;)A[j][k++]=p.nextInt();
ভিক্টর স্টাফুসা

@ ভিক্টর ধন্যবাদ, আমি এগুলি এবং অন্যান্য পরিবর্তন করেছি।
ওয়ালি

while(true)পরিবর্তন করা যাবেfor(;;)
user12205

@ অতিরিক্ত ধন্যবাদ - সেটি এবং আরও কয়েকটি জিনিস বদলেছে এবং ১৫ টি চর শেভ করেছে।
ওয়ালি

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.