| 24小時熱門版塊排行榜 |
| 查看: 2556 | 回復: 11 | ||
加油大楠楠銅蟲 (小有名氣)
|
[求助]
請教matlab用數(shù)組給參數(shù)矩陣賦值的問題
|
|
|
syms x y z d1 d2 d3 r l;n=1;%定義矩陣參數(shù) a=1/l*[z+r-d1 0 0;0 -0.866*y-0.5*z+r-d2 0;0 0 0.866*y-0.5*z+r-d3]; b=[x y z+r-d1;x y-0.866*r+0.866*d2 z-0.5*r+0.5*d2;x y+0.866*r-0.866*d3 z-0.5*r+0.5*d3]; c=inv(a); d=c*b;%d為我需要的比矩陣 到這一步矩陣的計算都不成問題 d=subs(d,{'r','l','x','y','z','d1','d2','d3'},{31.8,40.2,B(n,1),B(n,2),B(n,3),B(n,4),B(n,5),B(n,6)}); %給參數(shù)賦值,其中x y z d1 d2 d3是用B矩陣的第n行對應的列來賦值的 e = norm(d,'fro'); %求范數(shù) f(n,1)=e;%將范數(shù)記錄 n=n+1; if n==101;%B數(shù)組有100行所以到一百終止 end 最后結果f數(shù)列中只有一個數(shù) ,請幫忙 |
木蟲 (正式寫手)
木蟲 (正式寫手)
銅蟲 (小有名氣)
|
不好意思回復晚了 那你再幫我看看這整段程序 我把上次的程序稍微改了下,就是對于每個l,我要求他xyx為不同值的時候的范數(shù),然后相加,最后把每個l的范數(shù)和提取出來,十分感謝了 我運行總是報錯 j=1;z=20;r=32; for l=32:34 %設定范圍 i=1; tezheng=0; for rad=0:l; %這兩個for的步長可以根據(jù)運算效率適當放大 for thea=0:pi/10:2*pi; m=rad*cos(thea); n=rad*sin(thea); d11=1/3*(3*r+3*m+sqrt(9*l^2-9*n^2-9*z^2)); d12=1/3*(6*r-3*m+3*n*sqrt(3)+sqrt(36*l^2-27*m^2-18*m*n*sqrt(3)-9*n^2-36*z^2)); d13=1/3*(6*r-3*m-3*n*sqrt(3)+sqrt(36*l^2-27*m^2+18*m*n*sqrt(3)-9*n^2-36*z^2)); B(i, =[m,n,z,d11,d12,d13];syms x1 y1 z1 d1 d2 d3 l1; a=(1/l1)*[z1+r-d1 0 0;0 -0.866*y1-0.5*z1+r-d2 0;0 0 0.866*y1-0.5*z1+r-d3]; b=[x1 y1 z1+r-d1;x1 y1-0.866*r+0.866*d2 z1-0.5*r+0.5*d2;x1 y1+0.866*r-0.866*d3 z1-0.5*r+0.5*d3]; c=inv(a); d=c*b;%d為雅克比矩陣 d=subs(d,{'l1','x1','y1','z1','d1','d2','d3'},{l,B(i,1),B(i,2),B(i,3),B(i,4),B(i,5),B(i,6)}); e = norm(d,'fro'); %2范數(shù) hh(i,1)=1/e;%把這個范數(shù)記錄在hh中 tezheng=hh(i,1)+tezheng;%相加對于相同l值的對應的范數(shù) i=i+1; end end tezheng1(j, =tezheng/(i-1);%把不同l值對應的范數(shù)求和再除以相應的l值 存在數(shù)組tezheng1中j=j+1; end 錯誤信息是 clear ??? Error using ==> mupadmex Error in MuPAD command: Out of memory Error in ==> sym.horzcat at 25 y = mupadmex('mllib::horzcat',strs{:}); Error in ==> jacobi at 16 a=(1/l1)*[z1+r-d1 0 0;0 -0.866*y1-0.5*z1+r-d2 0;0 0 0.866*y1-0.5*z1+r-d3]; >> |
木蟲 (正式寫手)
|
我還是不是很明白你要做什么,你這個程序寫的我有點看不懂。但有點建議,一:你這個應該沒有必要用符號計算,符號計算很慢。二:你這個程序編寫的不怎樣,基礎不是很好,寫的有C語言的感覺,可能你的想法你沒用程序表達出來,要不你說說你要干啥吧,我看能不能幫你。話說直了點,望不怪。 下面是我沒用符號計算程序,速度快了很多,但是還是存在錯誤,出不了結果,因為我還是沒有理解你要干啥。 j=1;z=20;r=32; for l=32:34 %設定范圍 i=1; tezheng=0; for rad=0:l; %這兩個for的步長可以根據(jù)運算效率適當放大 for thea=0:pi/10:2*pi; m=rad*cos(thea); n=rad*sin(thea); d11=1/3*(3*r+3*m+sqrt(9*l^2-9*n^2-9*z^2)); d12=1/3*(6*r-3*m+3*n*sqrt(3)+sqrt(36*l^2-27*m^2-18*m*n*sqrt(3)-9*n^2-36*z^2)); d13=1/3*(6*r-3*m-3*n*sqrt(3)+sqrt(36*l^2-27*m^2+18*m*n*sqrt(3)-9*n^2-36*z^2)); B(i, =[m,n,z,d11,d12,d13];a=(1/B(i,1))*[B(i,3)+r-B(i,4) 0 0;0 -0.866*B(i,2)-0.5*B(i,3)+r-B(i,5) 0;0 0 0.866*B(i,2)-0.5*B(i,3)+r-B(i,6)]; b=[B(i,1) B(i,2) B(i,3)+r-B(i,4);B(i,1) B(i,2)-0.866*r+0.866*B(i,5) B(i,3)-0.5*r+0.5*B(i,5);B(i,1) B(i,2)+0.866*r-0.866*B(i,6) B(i,3)-0.5*r+0.5*B(i,6)]; % c=inv(a); d=a\b;%d為雅克比矩陣 e = norm(d,'fro'); %2范數(shù) hh(i,1)=1/e;%把這個范數(shù)記錄在hh中 tezheng=hh(i,1)+tezheng;%相加對于相同l值的對應的范數(shù) i=i+1; end end tezheng1(j, =tezheng/(i-1+eps);%把不同l值對應的范數(shù)求和再除以相應的l值 存在數(shù)組tezheng1中j=j+1; end |
銅蟲 (小有名氣)
|
看來真是行家 我這是臨時學的matlab 才不到一個月 因為我有一個計算要做我跟你說一下 麻煩您幫我看一下,我是做機械的,里面有一個設計參數(shù)l,有一個設計指標,是一個矩陣就是上面說的那個雅克比矩陣,我現(xiàn)在要計算對應每個l的雅克比矩陣,但是每個l的雅克比矩陣同時也有變量xyz,d1d2d3的,并不是一個數(shù),他是一個數(shù)集,所以你看到我編程用的是i=1; tezheng=0; for rad=0:l; %這兩個for的步長可以根據(jù)運算效率適當放大 for thea=0:pi/10:2*pi; m=rad*cos(thea); n=rad*sin(thea); d11=1/3*(3*r+3*m+sqrt(9*l^2-9*n^2-9*z^2)); d12=1/3*(6*r-3*m+3*n*sqrt(3)+sqrt(36*l^2-27*m^2-18*m*n*sqrt(3)-9*n^2-36*z^2)); d13=1/3*(6*r-3*m-3*n*sqrt(3)+sqrt(36*l^2-27*m^2+18*m*n*sqrt(3)-9*n^2-36*z^2)); 說白了我就是想把每個l中不同的xyz,d1d2d3對應的矩陣二范數(shù)求出來,就是這樣 謝謝了 |
銅蟲 (小有名氣)
木蟲 (正式寫手)
|
開始那個由于你在rad中用了0,導致了出現(xiàn)了NAN,我照你的程序修改了下,可以出部分結果,程序如下: j=1;z=20;r=32; for l=32:34 %設定范圍 i=1; tezheng=0; for rad=1:l; %這兩個for的步長可以根據(jù)運算效率適當放大,此處我改成了從1開始 for thea=0:pi/10:2*pi; x=rad*cos(thea); %x y=rad*sin(thea); %y d11=1/3*(3*r+3*x+sqrt(9*l^2-9*y^2-9*z^2)); d12=1/3*(6*r-3*x+3*y*sqrt(3)+sqrt(36*l^2-27*x^2-18*x*y*sqrt(3)-9*y^2-36*z^2)); d13=1/3*(6*r-3*x-3*y*sqrt(3)+sqrt(36*l^2-27*x^2+18*x*y*sqrt(3)-9*y^2-36*z^2)); B(i,:)=[x,y,z,d11,d12,d13]; a=(1/B(i,1))*[B(i,3)+r-B(i,4) 0 0;0 -0.866*B(i,2)-0.5*B(i,3)+... r-B(i,5) 0;0 0 0.866*B(i,2)-0.5*B(i,3)+r-B(i,6)]; b=[B(i,1) B(i,2) B(i,3)+r-B(i,4);B(i,1) B(i,2)-0.866*r+... 0.866*B(i,5) B(i,3)-0.5*r+0.5*B(i,5);B(i,1) B(i,2)+... 0.866*r-0.866*B(i,6) B(i,3)-0.5*r+0.5*B(i,6)]; % c=inv(a); d=a\b; %d為雅克比矩陣 e = norm(d,'fro'); %2范數(shù) hh(i,1)=1/(eps+e);%把這個范數(shù)記錄在hh中 tezheng=hh(i,1)+tezheng;%相加對于相同l值的對應的范數(shù) i=i+1; end end tezheng1(j,:)=tezheng/(i-1+eps);%把不同l值對應的范數(shù)求和再除以相應的l值 存在數(shù)組tezheng1中 j=j+1; end 根據(jù)你說的和我理解的,我自己寫了一個,運行速度理論上會快點,也可以把你計算過程中的大部分數(shù)據(jù)記錄下來,程序如下: %對于l我感覺你要是后面是求和的話,沒有必要那樣,你的求和在多重循環(huán)里面,重復了很多次,我就將l設成了你程序中的最大值,這個你自己再考慮下,看著修改吧。 j=1;r=32;l = 34; %注意我把l設成了一個常數(shù) for rad = 1:34 %theta = 0:pi/10:2*pi x(rad,:) = rad*cos(0:pi/10:2*pi); %x y(rad,:) = rad*sin(0:pi/10:2*pi); %y z(rad,:) = 20*ones(size(0:pi/10:2*pi)); d11(rad,:)=1/3*(3*r+3*x(rad,:)+sqrt(9*l^2-9*y(rad,:).^2-9*z(rad,:).^2)); d12(rad,:)=1/3*(6*r-3*x(rad,:)+3*y(rad,:)*sqrt(3)+sqrt(36*l^2-... 27*x(rad,:).^2-18*x(rad,:).*y(rad,:)*sqrt(3)-9*y(rad,:).^2-36*z(rad,:).^2)); d13(rad,:)=1/3*(6*r-3*x(rad,:)-3*y(rad,:)*sqrt(3)+sqrt(36*l^2-... 27*x(rad,:).^2+18*x(rad,:).*y(rad,:)*sqrt(3)-9*y(rad,:).^2-36*z(rad,:).^2)); B(rad,1:21,1:6) = [(x(rad,:))',(y(rad,:))',(z(rad,:))',(d11(rad,:))',(d12(rad,:))',(d13(rad,:))']; n = length(B(rad,:,1)); for k = 1:n a(:,:,rad,k) = (1/B(rad,k,1)).*[B(rad,k,3)+r-B(rad,k,4) 0 0;0 -0.866.*B(rad,k,2)-0.5.*B(rad,k,3)+... r-B(rad,k,5) 0;0 0 0.866.*B(rad,k,2)-0.5.*B(rad,k,3)+r-B(rad,k,6)]; b(:,:,rad,k) = [B(rad,k,1) B(rad,k,2) B(rad,k,3)+r-B(rad,k,4);B(rad,k,1) B(rad,k,2)-0.866.*r+... 0.866.*B(rad,k,5) B(rad,k,3)-0.5.*r+0.5.*B(rad,k,5);B(rad,k,1) B(rad,k,2)+... 0.866.*r-0.866.*B(rad,k,6) B(rad,k,3)-0.5.*r+0.5.*B(rad,k,6)]; d(:,:,rad,k)=a(:,:,rad,k)\b(:,:,rad,k); %雅克比矩陣 e(rad,k) = norm(d(:,:,rad,k),'fro'); %二范數(shù) end hh = 1./e; %同你程序中的hh,只是此處為一個矩陣,即所有你的hh都在這里 end tezheng = sum((sum(hh)));%所有的hh求和 %到這里,求和都做了,所有的e,hh都有數(shù)據(jù)在里面,后面我不是很明白,你自己看著修改吧。 |
銅蟲 (小有名氣)
木蟲 (正式寫手)
銅蟲 (小有名氣)
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 材料292調(diào)劑 +4 | 橘頌思美人 2026-03-23 | 4/200 |
|
|---|---|---|---|---|
|
[考研] 材料專碩英一數(shù)二306 +8 | z1z2z3879 2026-03-18 | 8/400 |
|
|
[考研] 316求調(diào)劑 +7 | 梁茜雯 2026-03-19 | 7/350 |
|
|
[考研] 298求調(diào)劑 +8 | 上岸6666@ 2026-03-20 | 8/400 |
|
|
[考研] 276求調(diào)劑 +3 | YNRYG 2026-03-21 | 4/200 |
|
|
[考研] 一志愿西安交通大學材料工程專業(yè) 282分求調(diào)劑 +11 | 楓橋ZL 2026-03-18 | 13/650 |
|
|
[考研] 求調(diào)劑一志愿海大,0703化學學碩304分,有大創(chuàng)項目,四級已過 +6 | 幸運哩哩 2026-03-22 | 10/500 |
|
|
[考研] 【考研調(diào)劑】化學專業(yè) 281分,一志愿四川大學,誠心求調(diào)劑 +11 | 吃吃吃才有意義 2026-03-19 | 11/550 |
|
|
[考研] 材料學碩333求調(diào)劑 +3 | 北道巷 2026-03-18 | 3/150 |
|
|
[考研] 278求調(diào)劑 +9 | 煙火先于春 2026-03-17 | 9/450 |
|
|
[考研] 313求調(diào)劑 +4 | 肆叁貳壹22 2026-03-19 | 4/200 |
|
|
[考研] 材料 271求調(diào)劑 +5 | 展信悅_ 2026-03-21 | 5/250 |
|
|
[考研] 求調(diào)劑 +3 | .m.. 2026-03-21 | 4/200 |
|
|
[考研] 一志愿南昌大學,327分,材料與化工085600 +9 | Ncdx123456 2026-03-19 | 9/450 |
|
|
[考研] 一志愿西安交通大學 學碩 354求調(diào)劑211或者雙一流 +3 | 我想要讀研究生 2026-03-20 | 3/150 |
|
|
[考研] 材料學碩318求調(diào)劑 +5 | February_Feb 2026-03-19 | 5/250 |
|
|
[考研] 288求調(diào)劑,一志愿華南理工大學071005 +5 | ioodiiij 2026-03-17 | 5/250 |
|
|
[考研] 0703化學調(diào)劑 +5 | pupcoco 2026-03-17 | 8/400 |
|
|
[考研] 本科鄭州大學物理學院,一志愿華科070200學碩,346求調(diào)劑 +4 | 我不是一根蔥 2026-03-18 | 4/200 |
|
|
[考研] 材料,紡織,生物(0856、0710),化學招生啦 +3 | Eember. 2026-03-17 | 9/450 |
|