我哪里做错了?这个表达式违反了基础数学。

1次查看(最近30天)
Sandip Ghatge
Sandip Ghatge 2020年5月12日
评论: Sandip Ghatge于2020年5月13日
如果您运行此代码,您将获得
Si(1,1)= -1 [Si是下面提到的主要公式的正弦术语]
SQROOT(1,1)= 0.0026
mi = 0.0026.
因此,根据%Main公式
Pos1 (1,1) = 0.0026 + 0.0026*(-1) = 0
但答案Matlab正在返回我是0.002
这怎么可能?
for循环是否有任何错误?
%定义参数值
FG = 2.1188;
fi = 2.7834;
ft = fg + fi;
h = 0.002;
k = 1864;
e = 0.7;
m = 0.001;
%初始化x
1 x = 0(11日);
x(1,1)= 0;
l = 0.002;
%公式1 - 确定新位置
为了i = 1:10
con1 =((ft * h) - (k *(h ^ 2)* 0.5))*(1-(e ^ 2));
x(i + 1,1)=(ft-(sqrt(ft ^ 2) - (2 * k *((con1)+((e ^ 2)*(ft * x(i,1) - (k* 0.5 *(x(i,1)^ 2)))))))))))/ k;
结尾
常量N&S初始化%
1) N = 0 (10;
s =零(10,1);
w =(2 * ft)/ m;
%计算常数N和S
为了i = 1:10
(我)= (((W * l) - ((k * (l ^ 2)) / m)) * ((e ^ 2 - 1)) ((e ^ 2) * (x(我,1))* (W + ((k * (x(我,1)))/ m))));
结尾
sininv =零(10,1);
sqroot = zeros(10,1);
pos1 = 0 (5000 1);
POS2 =零(5000,1);
时间=零(5000,1);
m = 2 * ft;
时间(1,1)= 0;
为了i = 1:10
n(i,1)=((k *((x(i,1))^ 2)) - (2 * ft *(x(i,1))))));
Sininv(I,1)= Asin((x(i,1) - (m / 2 * k))/(sqrt(((m / 2 * k)^ 2)+(n(i,1)/ k))))));
SQROOT(I,1)= SQRT((((m /(2 * k))^ 2)+(n(i,1)/ k)));
为了J = 1:5000
时间(J + 1,1)=时间(J,1)+0.0001;
%公式2 - POS1
如果= (sin (((sqrt (k / m)) *时间(1,1))+ sininv (1,1)));
MI = M / (2 * k);
%的主要公式
POS1(J,1)= MI +(SQROOT(I,1))*(SIN((SQRT(k / m))*时间(j,1))+ sininv(i,1)));
结尾
结尾
2评论
Sandip Ghatge
Sandip Ghatge 2020年5月12日
我只是在检查SI值,它是否等于-1
至于时间,我尝试了很多次,如下所示,但问题仍然没有解决,
%定义参数值
FG = 2.1188;
fi = 2.7834;
ft = fg + fi;
h = 0.002;
k = 1864;
e = 0.7;
m = 0.001;
%初始化x
1 x = 0(11日);
x(1,1)= 0;
l = 0.002;
%公式1 - 确定新位置
为了i = 1:10
con1 =((ft * h) - (k *(h ^ 2)* 0.5))*(1-(e ^ 2));
x(i + 1,1)=(ft-(sqrt(ft ^ 2) - (2 * k *((con1)+((e ^ 2)*(ft * x(i,1) - (k* 0.5 *(x(i,1)^ 2)))))))))))/ k;
结尾
常量N&S初始化%
1) N = 0 (10;
s =零(10,1);
w =(2 * ft)/ m;
%计算常数N和S
为了i = 1:10
(我)= (((W * l) - ((k * (l ^ 2)) / m)) * ((e ^ 2 - 1)) ((e ^ 2) * (x(我,1))* (W + ((k * (x(我,1)))/ m))));
结尾
sininv =零(10,1);
sqroot = zeros(10,1);
% pos1 = 0 (5000,1);
POS2 =零(5000,1);
m = 2 * ft;
时间=(0:4999)。* 0.0001;
为了i = 1:10
n(i,1)=((k *((x(i,1))^ 2)) - (2 * ft *(x(i,1))))));
Sininv(I,1)= Asin((x(i,1) - (m / 2 * k))/(sqrt(((m / 2 * k)^ 2)+(n(i,1)/ k))))));
SQROOT(I,1)= SQRT((((m /(2 * k))^ 2)+(n(i,1)/ k)));
MI = M / (2 * k);
POS1 = MI +(SQROOT(I,1))*(SIN((SQRT(k / m))。*时间)+ sininv(i,1)));
结尾

登录评论。

接受答案

斯蒂芬
斯蒂芬 2020年5月12日
编辑:斯蒂芬 2020年5月12日
你的代码有两个循环,循环 j 嵌套在内部循环中 一世
您分配数据 POS1. 只使用索引 j ,这意味着你要替换 POS1. 数据十次(每次一次 一世 迭代),并且只保留最后的值。这里有一小段代码要放置 POS1. 分配,您将看到您分配的十个值,然后替换一次 一世 迭代:
如果j = = 1
disp (pos1 (1))
结尾
当我添加那个代码时,这些是您分配给的十个值 POS1(1)
0.
0.0007348123729260462
0.001229147082940499.
0.001551112338708252
0.001750919824749765
0.001867711745054821
0.001932038559298222
0.001965829383562728
0.001983030898594019
0.001991628840290395
前9个被下一个值覆盖。最后只存储最后一个值。这个值对应于 j = = 1 我== 10. 当你手工计算时,你没有考虑到。使用正确的 一世 j 值提供完全相同的值 POS1.
>> TMP =(SQROOT(1,1))*(SIN((SQRT(k / m))*时间(1,1))+ sininv(10,1)))%J == 10
tmp = -0.002629935049104
3评论
Sandip Ghatge
Sandip Ghatge 于2020年5月13日
是的,我使用了i索引并能够绘制。谢谢

登录评论。

更多答案(1)

Cris Lapierre.
Cris Lapierre. 2020年5月12日
编辑:Cris Lapierre. 2020年5月12日
你的方程式没有问题。但是,仔细考虑你的代码。嵌套的for循环会打乱你的逻辑。的变量 POS1. 每次uperloop增量时都会覆盖。一旦代码完成执行,您正在检查POS1(1,1)的值。这意味着您应该使用数学检查 SQROOT(I,1) 在哪里 我= 10. (外层循环计数器的最后一个值)。
Si(1,1)= -1
sqroot (10,1) = 0.0006
mi = 0.0026.
POS1(1,1)= 0.0026 + 0.0006 *( - 1)= 0.002

社区宝藏狩猎

找到Matlab Central中的宝藏,并发现社区如何帮助您!

开始狩猎!