کلیدستان

نسخه‌ی کامل: محاشبه نرمال یک ماتریس، در متلب
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام


من یه ماتریسی دارم (10*10)که میخوام همه درایه هاش رو تک تک  با این فرمول نرمال بکنم همون طور که میبینید فرمول بیان میکنه که هر درایه باید تقسیم بر(توان دوم هر درایه اون ستون  بعدش همه رو جمع میکنه بعدش یه جذر میگیره)
کسی میتونه کمکم کنه؟؟ 
سلام.
من کد متلب زیر را نوشتم اما حتما آن را تست کنید. یعنی یک ماتریس کوچک (با تعداد ردیف و ستون متفاوت) را روی کاغذ خودتون محاسبه کنید و بعد آن را به برنامه داده و ببینید که نتایج آن صحیح است یا خیر.
کد متلب :

کد:
clear all
close all
clc

A=[1 2 3; 4 5 6; 7 8 9;10 11 12]
A_size = size(A)
A_new=A*0;
for ii=1:A_size(1)
    for jj=1:A_size(2)
        sum=0;
        for kk=1:A_size(1)
            sum=sum+A(kk,jj)^2;
        end
        A_new(ii,jj)=A(ii,jj)/sqrt(sum);
    end
end
A_new

نتیجه اجرای کد متلب بالا :

کد:
A =

     1     2     3
     4     5     6
     7     8     9
    10    11    12


A_size =

     4     3


A_new =

    0.0776    0.1367    0.1826
    0.3105    0.3418    0.3651
    0.5433    0.5469    0.5477
    0.7762    0.7519    0.7303

اقای مدیر من تست کردم کاملا درست کار کرد ولی متوجه شدم که باید بعد از این که نرمال شد ماتریس با یک ماترسی دیگه ضرب بشه
یعنی مثلا متلب A_new رو محاسبه کرد بعدش هر ستون A_new را ضرب در یک عدد بکنه
بعنوان مثال همین ماتریس شما که مثال زدین اگه هر ستون ماتریس A_new ضرب این عدد بشه(برای ستون اول باید ضرب در 0.2 بشه)

کد پی‌اچ‌پی:
[0.2,0.1,0.3

جواب باید به این صورت بشه مثلا برای ستون اول

کد پی‌اچ‌پی:
>> [0.0776
0.3105
0.5433
0.7762
]*[0.2]

ans =

    
0.0155    0.0621    0.1087    0.1552 

چون ماتریسی که میخوام حل کنم درایه هاش خیلی زیاده 20*20 نمیتونم هر ستون رو تو متلب بصورت جدا بنویسم و ضرب اون عدد مورد نظر کنم
ایا راهی هست که یک دفه این محاسبات رو انجام بده متلب؟؟؟
لطفا کمک کنید
کسی نیست کمک کنه؟؟
شما ضرایب را در یک بردار دارید، بنابراین دو حلقه for تو در تو بسازید (بر اساس تعداد عناصر بردار ضرایب و همچنین تعداد ردیف های ماتریس اصلی) و سپس ضرایب را تک تک از بردار مورد نظر فراخوانی کرده و در عناصر ستون مورد نظر ضرب کنید.
اینکه کد نمی نویسم، به این دلیله که این مورد را حتما باید خودتان یاد بگیرید تا در آینده در برنامه نویسی متلب مشکلی نداشته باشید.

این انگیزه ای که میدید مجبور میکنید که کاربر دقیقا یاد بگیره
مرسی ازتون