为什么老说长度不匹配,如何绘图
已知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 编辑 ] 改为
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));
请教高手
谢谢回复!但关键不是那个问题.问题在于如何实现每给定一个w,就对向量1/(w-wk2)求一次和.
然后可以用 Plot(w,f,'-')绘出图形.
请帮忙试一下如何绘出图形. sum是向量求和的意思
什么叫做给定一个w,就对向量1/(w-wk2)求一次和?
单个值求和?
[ 本帖最后由 ChaChing 于 2010-3-1 12:30 编辑 ]
请教高手
谢谢回复.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 编辑 ]
如何画出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 编辑 ] 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) 楼上正解,当然也可以采用矩阵运算,不过比较容易弄错,但是效率比较高
多谢
非常感谢jimin (敏敏) 和Happy两位大侠.虽然w值很小(w<1)的区域(我已将代码中的w区域取为0:0.1:5试了一下),y(w)的奇异性仍未能画出来,我自己再想想.
Happy大侠说的用矩阵运算,能否将代码写出来,让小弟我能够学到更多.
[ 本帖最后由 xjzuo 于 2006-9-14 16:29 编辑 ] 上面的程序略作修改就行了
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 编辑 ]
谢谢
很感谢happy教授,原来是我步长取得太大了.关于矩阵运算,能否将代码写出来,让小弟我能够开开眼界. 没工夫写那个了,自己考虑一下吧,无非就是矩阵运算,本科都应该学过的
[ 本帖最后由 ChaChing 于 2010-4-28 00:10 编辑 ] http://forum.vibunion.com/forum/viewthread.php?tid=25459中已经解决
不建议开多个主题
[ 本帖最后由 eight 于 2007-2-23 12:26 编辑 ] 你问题的关键在‘y=0.01*w/100.*sum(1./(w-wk2));’这一句,w是10个数的向量(命令窗口中输入),wk2与k一样是21个数的向量,两者根本不匹配嘛! 迟来的矩阵运算代码(不妥的地方还请大家指点):
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