怎么将数组值赋值到单位矩阵对角线主对角线 上

新人求助,mathcad怎么给矩阵的主对角线数据赋值为0_mathcad吧_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:2,569贴子:
新人求助,mathcad怎么给矩阵的主对角线数据赋值为0收藏
如题。问题的来源是下图ln对数在z为0的时候返回了-1*10^307,导致我的结果中主对角线数据需要手动改零。
票牛教你如何买到热门、便宜、真实的演出门票!
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或小木虫 --- 500万硕博科研人员喜爱的学术科研平台
&&查看话题
请教matlab用数组给参数矩阵赋值的问题
syms x y z d1 d2 d3n=1;%定义矩阵参数
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)});
%给参数赋值,其中x y z d1 d2 d3是用B矩阵的第n行对应的列来赋值的
e = norm(d,'fro'); %求范数
f(n,1)=e;%将范数记录
if n==101;%B数组有100行所以到一百终止
最后结果f数列中只有一个数 ,请帮忙
不好意思回复晚了&&那你再帮我看看这整段程序& &我把上次的程序稍微改了下,就是对于每个l,我要求他xyx为不同值的时候的范数,然后相加,最后把每个l的范数和提取出来,十分感谢了&&我运行总是报错
j=1;z=20;r=32;
for l=32:34& &%设定范围
i=1;&&tezheng=0;& &&&
& & for rad=0:l; %这两个for的步长可以根据运算效率适当放大
& && &&&for thea=0:pi/10:2*
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));
syms x1 y1 z1 d1 d2 d3 l1;
a=(1/l1)*;
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范数
hh(i,1)=1/e;%把这个范数记录在hh中
tezheng=hh(i,1)+%相加对于相同l值的对应的范数
& && &&&end
tezheng1(j,:)=tezheng/(i-1);%把不同l值对应的范数求和再除以相应的l值&&存在数组tezheng1中
错误信息是
??? 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)*;
看来真是行家&&我这是临时学的matlab 才不到一个月&&因为我有一个计算要做我跟你说一下&&麻烦您帮我看一下,我是做机械的,里面有一个设计参数l,有一个设计指标,是一个矩阵就是上面说的那个雅克比矩阵,我现在要计算对应每个l的雅克比矩阵,但是每个l的雅克比矩阵同时也有变量xyz,d1d2d3的,并不是一个数,他是一个数集,所以你看到我编程用的是i=1;&&tezheng=0;& &&&
& & for rad=0:l; %这两个for的步长可以根据运算效率适当放大
& && &&&for thea=0:pi/10:2*
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对应的矩阵二范数求出来,就是这样&&谢谢了
程序中的吗,m,n就是xy,为了减少计算量我把z固定了是20,其实xyz是空间坐标
开始那个由于你在rad中用了0,导致了出现了NAN,我照你的程序修改了下,可以出部分结果,程序如下:
j=1;z=20;r=32;
for l=32:34& &%设定范围
& & i=1;&&tezheng=0;
& & for rad=1:l; %这两个for的步长可以根据运算效率适当放大,此处我改成了从1开始
& && &&&for thea=0:pi/10:2*
& && && && &
& && && && &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,:)=;
& && && && &a=(1/B(i,1))*;
& && && && &b=;
%& && && && & c=inv(a);
& && && && &d=a\b; %d为雅克比矩阵
& && && && &e = norm(d,'fro'); %2范数
& && && && &hh(i,1)=1/(eps+e);%把这个范数记录在hh中
& && && && &tezheng=hh(i,1)+%相加对于相同l值的对应的范数
& && && && &i=i+1;
& && &&&end
& & tezheng1(j,:)=tezheng/(i-1+eps);%把不同l值对应的范数求和再除以相应的l值&&存在数组tezheng1中
& & j=j+1;
根据你说的和我理解的,我自己写了一个,运行速度理论上会快点,也可以把你计算过程中的大部分数据记录下来,程序如下:
%对于l我感觉你要是后面是求和的话,没有必要那样,你的求和在多重循环里面,重复了很多次,我就将l设成了你程序中的最大值,这个你自己再考虑下,看着修改吧。
j=1;r=32;l = 34;&&%注意我把l设成了一个常数
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) = ;
& & n = length(B(rad,:,1));
& & for k = 1:n
& && &&&a(:,:,rad,k) = (1/B(rad,k,1)).*;
& && &&&b(:,:,rad,k) = ;
& && &&&d(:,:,rad,k)=a(:,:,rad,k)\b(:,:,rad,k); %雅克比矩阵
& && &&&e(rad,k) = norm(d(:,:,rad,k),'fro');&&%二范数
& & hh = 1./e;&&%同你程序中的hh,只是此处为一个矩阵,即所有你的hh都在这里
tezheng = sum((sum(hh)));%所有的hh求和
%到这里,求和都做了,所有的e,hh都有数据在里面,后面我不是很明白,你自己看着修改吧。
我大概明白了&&再厚脸皮问你一下 这个hh矩阵能不能用极坐标画出来 画成三维的图,就是图中x坐标为极轴长,y坐标为角度,hh中对应的数值为z值
在此程序中,x,y均为34*21行的矩阵,而hh是34*21的矩阵,是不能直接绘制三维图的。对于每一重循环,x,y,hh貌似均为向量也是不行的。你自己可以修改看看,要是要用柱坐标绘图,你可以用pol2cart,具体用法可以help pol2cart,将其转换成直角坐标,再在直角坐标中绘制图形。
我昨天晚上研究了一晚晚上&&,都不行说是,我开始是用surf直接画图,把hh所有得数选定了surf(hh(1:34),hh(1:21)),这个命令就能画出来,用pol2cart 我是这么编的for i=1:1:34;
for j=1:1:21;
=pol2cart(i*cos(j*pi/10),i*sin(j*pi/10));
surf(x,y,hh);就不对&&能帮我看看吗
我想你应该是对rad,和theta进行优化吧,对于rad和theta是可以画图的,但是我只能绘制直角坐标的图,柱坐标的我也没想出来,但是直角坐标也应该可以看出来。你在后面添加如下语句:
theta = 0:pi/10:2*
rad = 1:34;
surf(theta,rad,hh);
这样可以得出个以theta为x轴,rad为y轴,hh为z轴的图,你看是不是你要的。
研究生必备与500万研究生在线互动!
扫描下载送金币
浏览器进程
打开微信扫一扫
随时随地聊科研}

我要回帖

更多关于 matlab对角线元素赋值 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信