xjzuo 发表于 2006-9-14 09:21

为什么老说长度不匹配,如何绘图

已知wk2是k的函数,且wk2=0.5*sin(k/2)^2;w是一变量,函数y=y(w)=0.0001*w*sum(1/(w-wk2)),
其中sum的意思是,每给定一个w,就对向量1/(w-wk2)求一次和.

现给定向量K=linspace(0,20);则向量wk2也确定。要求绘出y=y(w)的图形。
下面是我的程序,不知为何老出错:

%先定义函数y=y(w)
function y=fw(w)
k=linspace(0,20); wk2=0.5*sin(k/2).^2; y=0.01*w/100.*sum(1./(w-wk2));

% 再回到命令窗口
w=(1:10)/20; y=fw(w)   

回车后,就出现了以下错误提示:

??? Error using ==> -
Matrix dimensions must agree.
Error in ==> C:\MATLAB6p5\work\fw.m
On line 6==> y=0.01*w/100.*sum(1./(w-wk2));

是不是说w与wk2向量长度不一样,但似乎它们的长度都是10啊
,不知该如何克服这个问题? 以便可以用 Plot(w,y,'-') 绘出图形.还请高手帮忙指教!

[ 本帖最后由 ChaChing 于 2010-4-28 00:10 编辑 ]

guoyun 发表于 2006-9-14 09:31

改为
function y=fw(w)
k=linspace(0,20,10);
wk2=0.5*sin(k/2).^2;
y=0.01*w/100.*sum(1./(w-wk2));

xjzuo 发表于 2006-9-14 09:44

请教高手

谢谢回复!但关键不是那个问题.

问题在于如何实现每给定一个w,就对向量1/(w-wk2)求一次和.
然后可以用 Plot(w,f,'-')绘出图形.

请帮忙试一下如何绘出图形.

多情清秋 发表于 2006-9-14 09:52

sum是向量求和的意思
什么叫做给定一个w,就对向量1/(w-wk2)求一次和?
单个值求和?

[ 本帖最后由 ChaChing 于 2010-3-1 12:30 编辑 ]

xjzuo 发表于 2006-9-14 10:27

请教高手

谢谢回复.

K变化,可写为向量形式.由于wk2=0.5*sin(k/2)^2,于是wk2也是一个向量,于是每给定一个w,1/(w-wk2)也是一个向量,sum就是对该向量求和.其实sum是对wk2,或说对K求和.

问题就是:在给定K向量的前提下,如何绘出y=y(w)=0.0001*w*sum(1/(w-wk2))的图形.

[ 本帖最后由 xjzuo 于 2006-9-14 10:38 编辑 ]

xjzuo 发表于 2006-9-14 15:42

如何画出y=y(w)的图形?

已知 wk是k的函数,且wk=0.5*sin(k/2)^2;w是一变量,函数y=y(w)=0.0001*w*sum(1/(w-wk)),
其中sum的意思是,每给定一个w,就对向量1/(w-wk)求一次和.

注: K的变化给定,可写为向量形式(见下面的代码).由于wk=0.5*sin(k/2)^2,于是wk也是一个向量,
于是每给定一个w,1/(w-wk)也是一个向量,sum就是对该向量求和.其实sum是对wk,或说对K求和.

问题就是:在给定K向量的前提下,如何绘出y=y(w)=0.0001*w*sum(1/(w-wk))的图形.

%先定义函数y=y(w)
function y=y(w)
k=linspace(0,20); wk=0.5*sin(k/2).^2; y=0.01*w/100.*sum(1./(w-wk));

% 再回到命令窗口
------------如何编写代码,才可以画出y=y(w)的图形呢? 请高手帮忙指点一下.

[ 本帖最后由 ChaChing 于 2010-4-28 00:07 编辑 ]

jimin 发表于 2006-9-14 16:00

function y=yyyy(w)
k=linspace(0,20);
wk=0.5*sin(k/2).^2;
y=0.01*w/100.*sum(1./(w-wk));

>> clear
>> w=1:0.1:5;
>> for i=1:length(w)
y(i)=yyyy(w(i));
end
>> plot(w,y)

happy 发表于 2006-9-14 16:10

楼上正解,当然也可以采用矩阵运算,不过比较容易弄错,但是效率比较高

xjzuo 发表于 2006-9-14 16:22

多谢

非常感谢jimin (敏敏) 和Happy两位大侠.
虽然w值很小(w<1)的区域(我已将代码中的w区域取为0:0.1:5试了一下),y(w)的奇异性仍未能画出来,我自己再想想.

Happy大侠说的用矩阵运算,能否将代码写出来,让小弟我能够学到更多.

[ 本帖最后由 xjzuo 于 2006-9-14 16:29 编辑 ]

happy 发表于 2006-9-14 16:27

上面的程序略作修改就行了
clear; w=.001:.001:1;
for i=1:length(w), y(i)=yyyy(w(i)); end
plot(w,y)

[ 本帖最后由 ChaChing 于 2010-4-28 00:11 编辑 ]

xjzuo 发表于 2006-9-14 16:35

谢谢

很感谢happy教授,原来是我步长取得太大了.
关于矩阵运算,能否将代码写出来,让小弟我能够开开眼界.

happy 发表于 2006-9-14 16:38

没工夫写那个了,自己考虑一下吧,无非就是矩阵运算,本科都应该学过的

[ 本帖最后由 ChaChing 于 2010-4-28 00:10 编辑 ]

happy 发表于 2006-9-14 17:18

http://forum.vibunion.com/forum/viewthread.php?tid=25459中已经解决

不建议开多个主题

[ 本帖最后由 eight 于 2007-2-23 12:26 编辑 ]

hunter_009 发表于 2006-9-14 21:48

你问题的关键在‘y=0.01*w/100.*sum(1./(w-wk2));’这一句,w是10个数的向量(命令窗口中输入),wk2与k一样是21个数的向量,两者根本不匹配嘛!

ch_j1985 发表于 2008-6-2 15:18

迟来的矩阵运算代码(不妥的地方还请大家指点):
clc; clear; close all
k=linspace(0,20); wk=0.5*sin(k/2).^2; w=.001:.001:1;
=meshgrid(w,wk);
y=1./(W-WK); y=sum(y(:,1:length(w))); y=0.01*w./100.*y;
plot(w,y)

[ 本帖最后由 ChaChing 于 2010-4-28 00:13 编辑 ]
页: [1] 2
查看完整版本: 为什么老说长度不匹配,如何绘图