ahqiu198357 发表于 2006-8-28 20:28

好心人帮我看看这个程序的结果如何输出

这个程序是关于两条曲线求交点的,我能画出图来,但不知道交点的横坐标如何输出,请好心人指点一下,谢谢
A=0.33*4/3*pi*(0.7e-3)^3/5e-9
h=1/20
r=0.7e-3
e=0.5
p=586.8
a=0.0001:0.01:1000;
y1=cot(a);
y2=(h*e*A*3)./(pi*4*r^3*a*p);
plot(a,y1,'r.'),axis()
axis normal, grid on,
hold on
plot(a,y2,'b.'),axis()
axis normal, grid on,
hold off
pause
j=1;
for i=1:0.00001:5
    if abs(cot(i)-(h*e*A*3)/(pi*4*r^3*a*p))<1e-4
      k(j)=i
      j=j+1;
    end
end
i=k
f=cot(i)-((h*e*A*3)./(pi*4*r^3*(i)*p))

[ 本帖最后由 ahqiu198357 于 2006-8-28 21:04 编辑 ]

多情清秋 发表于 2006-8-28 21:12

参考http://forum.vibunion.com/forum/viewthread.php?tid=9707中的方法

buaalqq 发表于 2006-8-28 21:43

不说怎么求交点,就你的代码说一下。
我觉得数组k里就是交点的横坐标,但是实际上我怀疑你的程序执行完后会不会有数组k。
因为if abs(cot(i)-(h*e*A*3)/(pi*4*r^3*a*p))<1e-4这句代码里(h*e*A*3)/(pi*4*r^3*a*p)是一个标量矩阵除一个横向量,维数是不对的。即使用点除恐怕也不行,因为cot(i)为标量,但另一个操作数是数组,那么运算后结果也是一个一维数组,也就是说if 语句的后面是一个数组,如果要执行k(j)=i   j=j+1;   就要求这个数组里的元素全不为零,如果有一个元素为零则不会执行,显然这个数组里的元素不会同时都不为零。
另外你这个程序不需要用循环语句,下面的语句即可:
k=;
t=find(abs(cot(k)-(h*e*A*3)./(pi*4*r^3*k*p))<1e-4);
k(t) 即为横坐标。
再就,代码中不要对i、j赋值,特别是循环语句中容易像c语言一样用到i、j。因为matlab中i、j是代表虚单位,随意修改是不好的习惯。

cozy 发表于 2006-8-29 11:27


收获一些知识
谢谢你们
谢谢振动论坛
页: [1]
查看完整版本: 好心人帮我看看这个程序的结果如何输出