声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3235|回复: 17

[绘图技巧] 为什么老说长度不匹配,如何绘图

[复制链接]
发表于 2006-9-14 09:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
已知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 编辑 ]
回复
分享到:

使用道具 举报

发表于 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));

评分

1

查看全部评分

 楼主| 发表于 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 编辑 ]
 楼主| 发表于 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 编辑 ]
 楼主| 发表于 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 编辑 ]
发表于 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)

评分

1

查看全部评分

发表于 2006-9-14 16:10 | 显示全部楼层
楼上正解,当然也可以采用矩阵运算,不过比较容易弄错,但是效率比较高
 楼主| 发表于 2006-9-14 16:22 | 显示全部楼层

多谢

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

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

[ 本帖最后由 xjzuo 于 2006-9-14 16:29 编辑 ]
发表于 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 编辑 ]
1.GIF

评分

1

查看全部评分

 楼主| 发表于 2006-9-14 16:35 | 显示全部楼层

谢谢

很感谢happy教授,原来是我步长取得太大了.
关于矩阵运算,能否将代码写出来,让小弟我能够开开眼界.
发表于 2006-9-14 16:38 | 显示全部楼层
没工夫写那个了,自己考虑一下吧,无非就是矩阵运算,本科都应该学过的

[ 本帖最后由 ChaChing 于 2010-4-28 00:10 编辑 ]
发表于 2006-9-14 17:18 | 显示全部楼层
http://forum.vibunion.com/forum/viewthread.php?tid=25459中已经解决

不建议开多个主题

[ 本帖最后由 eight 于 2007-2-23 12:26 编辑 ]
发表于 2006-9-14 21:48 | 显示全部楼层
你问题的关键在‘y=0.01*w/100.*sum(1./(w-wk2));’这一句,w是10个数的向量(命令窗口中输入),wk2与k一样是21个数的向量,两者根本不匹配嘛!
发表于 2008-6-2 15:18 | 显示全部楼层
迟来的矩阵运算代码(不妥的地方还请大家指点):

  1. clc; clear; close all
  2. k=linspace(0,20); wk=0.5*sin(k/2).^2; w=.001:.001:1;
  3. [W,WK]=meshgrid(w,wk);
  4. y=1./(W-WK); y=sum(y(:,1:length(w))); y=0.01*w./100.*y;
  5. plot(w,y)
复制代码

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

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-5 00:37 , Processed in 0.062624 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表