声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1331|回复: 12

[编程技巧] 这个循环命令 哪里出错了?

[复制链接]
发表于 2007-3-12 17:08 | 显示全部楼层 |阅读模式

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

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

x
我的命令想要表达的意思是:  每个m对应一个A, A为以B为未知数的方程的系数,计算得到B; B是以X为未知数的方程组的系数,所以每个B 得到 (x1,x2); 带入(x1,x2),在每个R下,求得最终的delta1,并且判断不同R对应的delta1之差,当小于0.000001时停止.

%主命令
Z1=26;
Z2=65;
Z3=65;
Z4=27;
Z5=144;
P=10;
r=440;
L=sqrt(950^2+70^2)
e=atan(70/950)
B0 = [0.003];
global R
R=750:-10:500;
m=-1000:20:0;
for i = 1: length(R)
x0=[-R(i),217.5]
options = optimset('Display','off');
for j = 1: length(m)
t(j)=m(j)*Z1*Z2*Z4/(Z2*Z3*Z5*P)
A(j)=asin(t(j)/135);
AA=A(j);
B(j)=fzero(@myfun,B0,options,AA);
BB=B(j);
x=fsolve(@myfun2,x0,options,BB);
x1(j)=x(1)
x2(j)=x(2)
delta1(i,j)=r-sqrt((x(1)+R+r).^2+(x(2)-217.5).^2)
end
if delta1(i+1,:)-delta1(1,:)<=0.000001
continue
end
end
plot(m,delta1(i,j));
hold on;
xlabel('m');
%函数1
function f=myfun(B,A)
Z1=26;
Z2=65;
Z3=65;
Z4=27;
Z5=144;
P=10;
L=sqrt(950^2+70^2)
e=atan(70/950)
f=[((20.*sin(A)-20.*cot(B).*(1-cos(A))-L.*sin(e+B)+tan(B).*(L*cos(e+B)-950))./(cot(B)+tan(B))+20.*(1-cos(A))).^2+(-20.*cot(B).*(1-cos(A))-cot(B).*((20.*sin(A)-20.*cot(B).*(1-cos(A))-L.*sin(e+B)+tan(B).*(L.*cos(e+B)-950))./(cot(B)+tan(B)))).^2-70^2];
%函数2
function y=myfun2(x,B)
global R
r=440;
y=[217.5.*(cos(B)-1).*x(1)./(-217.5.*sin(B)+R+r)+217.5.*(cos(B)-1).*(R+r)./(-217.5.*sin(B)+R+r)-x(2)+217.5;(x(1)+217.5.*sin(B)).^2+(x(2)-217.5.*cos(B)).^2-R.^2];

[ 本帖最后由 charlotte.w 于 2007-3-13 10:46 编辑 ]
回复
分享到:

使用道具 举报

发表于 2007-3-12 22:41 | 显示全部楼层
"1=26;"
有问题吧,那是1还是什么别的字母?
发表于 2007-3-12 22:52 | 显示全部楼层
标一下运行提示的错误吧,看看在什么地方出错了,方便寻找啊。
现在这样太长了,不容易看啊

[ 本帖最后由 eight 于 2007-3-12 22:59 编辑 ]
发表于 2007-3-13 01:01 | 显示全部楼层
  1. delta1(i,j)=r-sqrt((x(1)+R+r).^2+(x(2)-217.5).^2)
复制代码


这一句显然是错误的

delta1(i,j)


表示的是一个标量

  1. r-sqrt((x(1)+R+r).^2+(x(2)-217.5).^2)
复制代码


是一个向量

显然向量不能赋给标量

评分

1

查看全部评分

 楼主| 发表于 2007-3-13 10:53 | 显示全部楼层
我想要表示的是: deltal 随R(i)和m(j)变化 得到delta(i,j).

delta1(i,j)=r-sqrt((x(1)+R+r).^2+(x(2)-217.5).^2)里面:R随i变化; x(1)和x(2)随j变化,为什么得不到delta1(i,j)呢?????????
发表于 2007-3-13 11:02 | 显示全部楼层

回复

如果你容易搞混,那就干脆这样:

%%%%%%%%%%%%%%%%%%%%%%%
已经给定m(j),R(i),  又算出x后,
再另作循环赋值给deltal,即可得到你要的deltal(i,j).
%%%%%%%%%%%%%%%%%%%%%%%

[ 本帖最后由 xjzuo 于 2007-3-13 11:15 编辑 ]
 楼主| 发表于 2007-3-13 11:04 | 显示全部楼层
这我是最新的命令,没有报错,但结果却相当奇怪 , 居然是离散点而不是曲线. 而且值和真实情况也差了数量级.是我哪里的赋值出错了呢?????? 望指教

Z1=26;
Z2=65;
Z3=65;
Z4=27;
Z5=144;
P=10;
r=440;
L=sqrt(950^2+70^2)
e=atan(70/950)
B0 = [0.003];
global A B R x1 x2
R=750:-10:500;
m=500:10:750;
for i = 1: length(R)
x0=[-R(i),217.5]
options = optimset('Display','off');
for j = 1: length(m)
t(j)=m(j)*Z1*Z2*Z4/(Z2*Z3*Z5*P)
A(j)=asin(t(j)/135);
B=fzero(@myfun,B0,options);
x=fsolve(@myfun2,x0,options);
x1(j)=x(1)
x2(j)=x(2)
delta1(i,j)=r-sqrt((x(1)+R(i)+r).^2+(x(2)-217.5).^2)
end
%if Abs(delta1(i+1,j)-delta1(1,j))<=0.000001
%continue
%end
plot(m(j),delta1(i,j));
hold on;
xlabel('m');
end
 楼主| 发表于 2007-3-13 11:12 | 显示全部楼层
原帖由 xjzuo 于 2007-3-13 11:02 发表
如果你容易搞混,那就干脆这样:

%%%%%%%%%%%%%%%%%%%%%%%
已经给定m(j), 又算出R(i)后,
再另作循环赋值给deltal,即可得到你要的deltal(i,j).
%%%%%%%%%%%%%%%%%%%%%%%

你是说:

         delta1=r-sqrt((x(1)+R(i)+r).^2+(x(2)-217.5).^2)

          delta1=delta1(i,j)
发表于 2007-3-13 11:18 | 显示全部楼层

回复

前面说得有点问题.
%%%%%%%%%%%%%%%%%%%%%%%
我是说, 如果你容易搞混,就另作 i,j 的 for 循环,
deltal(i,j)=......
%%%%%%%%%%%%%%%%%%%%%%%

另:你的plot(m(j),delta1(i,j));语句,似乎可以放到循环外面(要改一下写法).
按你的意思,是每次打印一个点,如果是这样,也许加上一个'o'更好.

[ 本帖最后由 xjzuo 于 2007-3-13 11:25 编辑 ]
 楼主| 发表于 2007-3-13 11:46 | 显示全部楼层
我是想每个R,对应一条delta1曲线

就算把plot(m,delta1)写在最外面,得到地还是离散点,为什么不是曲线呢??????????????

[ 本帖最后由 charlotte.w 于 2007-3-13 16:21 编辑 ]
发表于 2007-3-13 15:17 | 显示全部楼层

回复

你的第二个修改了的程序更糟糕.
虽然我根据你的第一个程序,修改后,已经算出了结果,
但结果并不好,因为由delta1(i,j)=r-sqrt((x(1)+R(i)+r...语句得到的delta1,
与 j 好象没有关系.
所以希望你能将问题讲得更清楚一些较好.

评分

1

查看全部评分

 楼主| 发表于 2007-3-13 16:14 | 显示全部楼层
我是希望每个R算一条delta1曲线(它由j个m求得)

[ 本帖最后由 charlotte.w 于 2007-3-13 16:16 编辑 ]
 楼主| 发表于 2007-3-14 09:21 | 显示全部楼层
大家帮我看看啊 ~~~~~~~~~~
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-21 05:38 , Processed in 0.052020 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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