| 查看: 2557 | 回復(fù): 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行對應(yīng)的列來賦值的 e = norm(d,'fro'); %求范數(shù) f(n,1)=e;%將范數(shù)記錄 n=n+1; if n==101;%B數(shù)組有100行所以到一百終止 end 最后結(jié)果f數(shù)列中只有一個數(shù) ,請幫忙 |
木蟲 (正式寫手)
|
我想你應(yīng)該是對rad,和theta進(jìn)行優(yōu)化吧,對于rad和theta是可以畫圖的,但是我只能繪制直角坐標(biāo)的圖,柱坐標(biāo)的我也沒想出來,但是直角坐標(biāo)也應(yīng)該可以看出來。你在后面添加如下語句: theta = 0:pi/10:2*pi; rad = 1:34; surf(theta,rad,hh); 這樣可以得出個以theta為x軸,rad為y軸,hh為z軸的圖,你看是不是你要的。 |
木蟲 (正式寫手)
銅蟲 (小有名氣)
|
不好意思回復(fù)晚了 那你再幫我看看這整段程序 我把上次的程序稍微改了下,就是對于每個l,我要求他xyx為不同值的時候的范數(shù),然后相加,最后把每個l的范數(shù)和提取出來,十分感謝了 我運(yùn)行總是報錯 j=1;z=20;r=32; for l=32:34 %設(shè)定范圍 i=1; tezheng=0; for rad=0:l; %這兩個for的步長可以根據(jù)運(yùn)算效率適當(dāng)放大 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值的對應(yīng)的范數(shù) i=i+1; end end tezheng1(j, =tezheng/(i-1);%把不同l值對應(yīng)的范數(shù)求和再除以相應(yīng)的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]; >> |
木蟲 (正式寫手)
|
我還是不是很明白你要做什么,你這個程序?qū)懙奈矣悬c看不懂。但有點建議,一:你這個應(yīng)該沒有必要用符號計算,符號計算很慢。二:你這個程序編寫的不怎樣,基礎(chǔ)不是很好,寫的有C語言的感覺,可能你的想法你沒用程序表達(dá)出來,要不你說說你要干啥吧,我看能不能幫你。話說直了點,望不怪。 下面是我沒用符號計算程序,速度快了很多,但是還是存在錯誤,出不了結(jié)果,因為我還是沒有理解你要干啥。 j=1;z=20;r=32; for l=32:34 %設(shè)定范圍 i=1; tezheng=0; for rad=0:l; %這兩個for的步長可以根據(jù)運(yùn)算效率適當(dāng)放大 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值的對應(yīng)的范數(shù) i=i+1; end end tezheng1(j, =tezheng/(i-1+eps);%把不同l值對應(yīng)的范數(shù)求和再除以相應(yīng)的l值 存在數(shù)組tezheng1中j=j+1; end |
銅蟲 (小有名氣)
|
看來真是行家 我這是臨時學(xué)的matlab 才不到一個月 因為我有一個計算要做我跟你說一下 麻煩您幫我看一下,我是做機(jī)械的,里面有一個設(shè)計參數(shù)l,有一個設(shè)計指標(biāo),是一個矩陣就是上面說的那個雅克比矩陣,我現(xiàn)在要計算對應(yīng)每個l的雅克比矩陣,但是每個l的雅克比矩陣同時也有變量xyz,d1d2d3的,并不是一個數(shù),他是一個數(shù)集,所以你看到我編程用的是i=1; tezheng=0; for rad=0:l; %這兩個for的步長可以根據(jù)運(yùn)算效率適當(dāng)放大 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對應(yīng)的矩陣二范數(shù)求出來,就是這樣 謝謝了 |
銅蟲 (小有名氣)
木蟲 (正式寫手)
|
開始那個由于你在rad中用了0,導(dǎo)致了出現(xiàn)了NAN,我照你的程序修改了下,可以出部分結(jié)果,程序如下: j=1;z=20;r=32; for l=32:34 %設(shè)定范圍 i=1; tezheng=0; for rad=1:l; %這兩個for的步長可以根據(jù)運(yùn)算效率適當(dāng)放大,此處我改成了從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值的對應(yīng)的范數(shù) i=i+1; end end tezheng1(j,:)=tezheng/(i-1+eps);%把不同l值對應(yīng)的范數(shù)求和再除以相應(yīng)的l值 存在數(shù)組tezheng1中 j=j+1; end 根據(jù)你說的和我理解的,我自己寫了一個,運(yùn)行速度理論上會快點,也可以把你計算過程中的大部分?jǐn)?shù)據(jù)記錄下來,程序如下: %對于l我感覺你要是后面是求和的話,沒有必要那樣,你的求和在多重循環(huán)里面,重復(fù)了很多次,我就將l設(shè)成了你程序中的最大值,這個你自己再考慮下,看著修改吧。 j=1;r=32;l = 34; %注意我把l設(shè)成了一個常數(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ā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿吉大化學(xué)322求調(diào)劑 +3 | 17501029541 2026-03-23 | 4/200 |
|
|---|---|---|---|---|
|
[考研] 材料292調(diào)劑 +4 | 橘頌思美人 2026-03-23 | 4/200 |
|
|
[考研] 070300化學(xué)求調(diào)劑 +8 | 苑豆豆 2026-03-20 | 8/400 |
|
|
[考研] 上海電力大學(xué)材料防護(hù)與新材料重點實驗室招收調(diào)劑研究生(材料、化學(xué)、電化學(xué),環(huán)境) +3 | 我愛學(xué)電池 2026-03-23 | 3/150 |
|
|
[考研] 263求調(diào)劑 +6 | yqdszhdap- 2026-03-22 | 9/450 |
|
|
[考研]
|
2117205181 2026-03-21 | 8/400 |
|
|
[考研] 317求調(diào)劑 +12 | 申子申申 2026-03-19 | 18/900 |
|
|
[考研] 一志愿西安交通大學(xué)材料工程專業(yè) 282分求調(diào)劑 +11 | 楓橋ZL 2026-03-18 | 13/650 |
|
|
[考研] 一志愿華中農(nóng)業(yè)071010,總分320求調(diào)劑 +5 | 困困困困坤坤 2026-03-20 | 6/300 |
|
|
[考研] 生物學(xué)071000 329分求調(diào)劑 +5 | 我愛生物生物愛?/a> 2026-03-17 | 5/250 |
|
|
[考研] 求調(diào)劑 +5 | Zhangbod 2026-03-21 | 7/350 |
|
|
[考研] 285求調(diào)劑 +6 | ytter 2026-03-22 | 6/300 |
|
|
[考研] 311求調(diào)劑 +3 | 勇敢的小吳 2026-03-20 | 3/150 |
|
|
[考研] 313求調(diào)劑 +4 | 肆叁貳壹22 2026-03-19 | 4/200 |
|
|
[考研] 266求調(diào)劑 +3 | 哇呼哼呼哼 2026-03-20 | 3/150 |
|
|
[考研] 294求調(diào)劑材料與化工專碩 +15 | 陌の森林 2026-03-18 | 15/750 |
|
|
[考研] 304求調(diào)劑 +7 | 司空. 2026-03-18 | 7/350 |
|
|
[考研] 中南大學(xué)化學(xué)學(xué)碩337求調(diào)劑 +3 | niko- 2026-03-19 | 6/300 |
|
|
[考研] 一志愿吉林大學(xué)材料學(xué)碩321求調(diào)劑 +11 | Ymlll 2026-03-18 | 15/750 |
|
|
[考研] 材料工程專碩調(diào)劑 +5 | 204818@lcx 2026-03-17 | 6/300 |
|