ম্যাট্রিক্সকে উল্টানো ভাল না কেন এর ব্যবহারিক উদাহরণ


16

লিনিয়ার সিস্টেম সমাধানের জন্য ম্যাট্রিক্সকে উল্টানো ভাল ধারণা নয়, যেহেতু এটি সরাসরি সিস্টেমটি সমাধান করার জন্য বা এলইউ, কোলেস্কি বা কিউআর পচন ব্যবহার করার মতো সঠিক এবং দক্ষ নয়।

তবে, আমি এটি ব্যবহারিক উদাহরণ দিয়ে পরীক্ষা করতে পারিনি। আমি এই কোডটি চেষ্টা করেছি (ম্যাটল্যাবে)

M   = 500;    
A   = rand(M,M);
A   = real(expm(1i*(A+A.')));
b   = rand(M,1);

x1  = A\b;
x2  = inv(A)*b;

disp(norm(b-A*x1))
disp(norm(b-A*x2))

এবং অবশিষ্টাংশগুলি সর্বদা একই ক্রমে থাকে (10 ^ -13)।

কেউ কি ব্যবহারিক উদাহরণ প্রদান করতে পারেন যাতে ইনভেনড (এ) * বি এ \ বি এর চেয়ে অনেক কম ভুল?

------ প্রশ্ন আপডেট ------

আপনার উত্তরের জন্য ধন্যবাদ। যাইহোক, যে অনুমান আমরা সমাধান আছে বার একটি সিস্টেম একটি এক্স = , যেখানে একজন সবসময় একই ম্যাট্রিক্স হয়। এটা বিবেচনা করুনnAx=bA

- পূর্ণ, এবং এইভাবে A - 1 এ এর চেয়ে একই মেমরি স্টোরেজ প্রয়োজন ।AA1A

এর স্বয়ংক্রিয়ভাবে শর্ত সংখ্যা ছোট, অত: পর একটি - 1 সঠিকতা সঙ্গে নির্ণিত করা যেতে পারে।AA1

সেক্ষেত্রে LU পচন ব্যবহার না করে গণনা করা আরও দক্ষ হবে না ? উদাহরণস্বরূপ, আমি এই মতলব কোডটি চেষ্টা করেছি:A1

%Set A and b:
M           = 1000; 
A           = rand(M,M);
A           = real(expm(1i*(A+A.')));
b           = rand(M,1);

%Times we solve the system:
n           = 3000;

%Performing LU decomposition:
disp('Performing LU decomposition')
tic
[L,U,P]     = lu(A);
toc
fprintf('\n')

%Solving the system n times with LU decomposition:
optsL.LT    = true;   %Options for linsolve
optsU.UT    = true;
disp('Solving the system n times using LU decomposition')
tic
for ii=1:n
    x1      = linsolve(U, linsolve(L,P*b,optsL) , optsU);
end
toc
fprintf('\n')

%Computing inverse of A:
disp('Computing inverse of A')
tic
Ainv        = inv(A);
toc
fprintf('\n')

%Solving the system n times with Ainv:
disp('Solving the system n times with A inv')
tic
for ii=1:n
    x2  = Ainv*b;
end
toc
fprintf('\n')

disp('Residuals')
disp(norm(b-A*x1))
disp(norm(b-A*x2))

disp('Condition number of A')
disp(cond(A))

450 সম্পর্কে শর্ত নম্বর দিয়ে একটি ম্যাট্রিক্স জন্য, অবশিষ্টাংশ হয় উভয় ক্ষেত্রেই, কিন্তু এটা সিস্টেমের সমাধানে এন বার এল ইউ পচানি ব্যবহার করার জন্য 19 সেকেন্ড সময় লাগে, একটি বিপরীত ব্যবহার করে এটি মাত্র 9 সেকেন্ড সময় লাগে যেহেতু।O(1011)


8
ইনভের জন্য ম্যাটল্যাব সহায়তা পৃষ্ঠাটি একটি ভাল উদাহরণ দেয়। সলভ লিনিয়ার সিস্টেম শিরোনাম বিভাগের অধীনে দেখুন ।
GoHokies 12

1
বিটিডব্লিউ, আপনার ম্যাট্রিক্সের শর্ত নম্বরটি কী? আমার পিসিতে কাজ করার জন্য ম্যাটল্যাব নেই যাতে আমি চেক করতে পারি না তবে আমি অনুমান করি যে আপনার পক্ষে একটি সঠিক বিপরীতমুখী হওয়ার পক্ষে এটি যথেষ্ট ছোট ...A
GoHokies

2
আমার ট্রফিথেন এবং বাউ (অনুশীলন 21.4) এ এক নজর ছিল, এবং তারা এটিকে বিশুদ্ধরূপে এটি গণনা ব্যয়ের শর্তাদি বর্ণনা করে, ফ্লপ বনাম 22n3ফ্লপ। সুতরাং এমনকি যদি আপনি অনুরূপ অনুরূপগুলি খুঁজে পান (GoHokies এর মন্তব্যে, আপনি কি আরও খারাপভাবে কন্ডিশনারযুক্ত ম্যাট্রিকগুলি পরীক্ষা করার চেষ্টা করেছেন?), একা অপ্রয়োজনীয় গণনা ব্যয়টি সম্ভবত পরামর্শের পক্ষে মূল্যবান। 23n3
কিরিল

3
আপনার তুলনা করার জন্য আপনার ম্যাট্রিক্সের আকারটি অনেক ছোট এবং কন্ডিশন্ড। এমন নয় যে আপনার যেখানে ম্যাট্রিক রয়েছে সেখানে প্রাসঙ্গিক সমস্যা নেই, তবে প্রাপ্ত মতামতটি যে আপনাকে উল্টানো উচিত নয় তা অন্যরকম সেটিংয়ের জন্য বোঝানো হয়েছে (উদাহরণস্বরূপ, ক্রিস রাকাকাকাস তার উত্তরে উল্লেখ করেছেন)। প্রকৃতপক্ষে, ছোট এবং - প্রত্যয়যুক্ত - ভাল-কন্ডিশনার ম্যাট্রিক্সের জন্য, বিপরীত গণনা করা আরও ভাল বিকল্প হতে পারে। একটি চরম ক্ষেত্রে 3x3 ঘূর্ণন (বা আরও বাস্তবের দিক থেকে, affine রূপান্তর) ম্যাট্রিক্স হবে।
খ্রিস্টান ক্ল্যাসন

1
আপনার যদি বার বার এটির সমাধান Ax=bকরতে হয় Aএবং এটি বিপরীতমুখী হওয়ার পক্ষে যথেষ্ট ছোট হয় তবে আপনি পরিবর্তে LU-factorization সংরক্ষণ করতে পারেন এবং এটি পুনরায় ব্যবহার করতে পারেন।
ক্রিস রাকাকাকাস

উত্তর:


11

সাধারণত উল্টোটি ব্যবহারের ক্ষেত্রে লিনিয়ার সিস্টেমটি সমাধান করার পক্ষে কিছু মূল কারণ রয়েছে। সংক্ষেপে:

  • শর্তসাপেক্ষ নম্বর নিয়ে সমস্যা (@ GoHokies মন্তব্য)
  • বিরল ক্ষেত্রে সমস্যা (@ ক্রিসারাকাউকাস উত্তর)
  • দক্ষতা (@ কিরিল মন্তব্য)

যাইহোক, @ ক্রিশ্চিয়ান ক্লাসন মন্তব্যগুলিতে মন্তব্য করেছেন, এমন কিছু ক্ষেত্রে হতে পারে যেখানে বিপরীত ব্যবহার একটি ভাল বিকল্প।

অ্যালেক্স দ্রুনসকির নোট / নিবন্ধে, সিভান টলেডো, ইনভ (এ) * খ কতটি সঠিক? এই সমস্যা সম্পর্কে কিছু বিবেচনা আছে।

x

inverse||xVx||O(κ2(A)ϵmachine) backward stable (LU, QR,...)||xbackwardstablex||O(κ(A)ϵmachine)

xV

V

V

V||xV||||x||

bA

সুতরাং অ্যাপ্লিকেশনটির সাথে বিপরীত নির্ভর করে না ব্যবহার করার সুযোগ, আপনি নিবন্ধটি পরীক্ষা করে দেখতে পারেন আপনি যদি পশ্চাৎপদ স্থিতিশীলতা অর্জনের শর্তটি সন্তুষ্ট করেন বা আপনার এটির প্রয়োজন না হয় তবে তা দেখুন।

সাধারণত, আমার মতে, লিনিয়ার সিস্টেমটি সমাধান করা আরও নিরাপদ।


12

Δu

ut=Δu+f(t,u).

A

ut=Au+f(t,u)

ক্যানোনিকাল 1 ডি উদাহরণ স্ট্র্যাং ম্যাট্রিক্স। অন্তর্নিহিত পদ্ধতিগুলির উল্টাতে হবেAIγASpecialMatrices.jl

julia> using SpecialMatrices
julia> Strang(5)
5×5 SpecialMatrices.Strang{Float64}:
 2.0  -1.0   0.0   0.0   0.0
-1.0   2.0  -1.0   0.0   0.0
 0.0  -1.0   2.0  -1.0   0.0
 0.0   0.0  -1.0   2.0  -1.0
 0.0   0.0   0.0  -1.0   2.0

nO(3n)O(1)

তবে, আসুন আমরা ম্যাট্রিক্সটি উল্টাতে চাই।

julia> inv(collect(Strang(5)))
5×5 Array{Float64,2}:
 0.833333  0.666667  0.5  0.333333  0.166667
 0.666667  1.33333   1.0  0.666667  0.333333
 0.5       1.0       1.5  1.0       0.5
 0.333333  0.666667  1.0  1.33333   0.666667
 0.166667  0.333333  0.5  0.666667  0.833333

লক্ষ্য করুন যে এই বিচ্ছিন্ন ম্যাট্রিক্সের বিপরীতটি ঘন। সুতরাং, আমরা যদি বিপর্যায়ের বিশ্লেষণাত্মক সমাধানটি না জানি (যা PDE বিবেচনার ফলে উদ্ভূত বেশিরভাগ স্পার্স ম্যাট্রিক্সের ক্ষেত্রে সত্য) তবে বিপরীতদের জন্য প্রয়োজনীয় পরিমাণ মেমরির পরিমাণটি হ'লO(n2)

পরিবর্তে, সরাসরি সমাধানকারী পদ্ধতির \এবং পুনরাবৃত্ত সমাধানকারীগুলির মতো পুনরাবৃত্তকারী সমাধানকারীরাIterativeSolvers.jl সমাধান করবেAx=bA1A

অন্যরা যেমন উল্লেখ করেছেন, শর্ত সংখ্যা এবং সংখ্যাগত ত্রুটি অন্য কারণ, তবে একটি স্পার্স ম্যাট্রিক্সের বিপরীতটি ঘন হওয়ার বিষয়টি একটি খুব স্পষ্ট "এটি একটি খারাপ ধারণা" দেয়।

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