如何编写一个循环,为每个给定的输入对找到最佳适合的值,并绘制所有的结果点?
6个观点(过去30天)
显示旧注释
Anitha Limann
2021年10月14日
你好,
我有t和vl个观测数据,我先把它们画出来,然后找到理论点,把它们画在同一个图里。
为了构建模型并找到理论值,我必须按照以下步骤编写代码。
- 为t1和vl1选择起始对。(在本例中,t=10, vl = 3.61)。
- 计算一个
- 计算B
- 计算a - b
- 测试abs (a - b);如果abs(A-B) < 0.001停止,则转到8。如果没有,请转6
- 增加六世=六世+ 0.005
- 转到2。
- 增加t = t + 5
- 转到1
- 最后绘制A=B的每一对图(近似,在给定公差范围内)
下面是我写的草稿循环,但我不确定如何实际使它工作。请帮帮我。
为T = 10;% tmax = 90;
为六世= 3.61
=每股((vs2 ^ 2)。* D2。* (i -(1 -(六世^ 2 / vs2。^ 2)))。/ (vs1 ^ 2)。* D1。* (i -(1 -(六世^ 2 / vs1。^ 2))));
B =(((2。*π。* z)。/(六世。* T))。* (sqrt((六世^ 2 / vs1。^ 2)1)));
而abs (a - b) < 0.001
T = T + 5;
一个=
B = B
打破
结束
而abs (a - b) > = 0.001
六世=六世+ 0.005;
一个=
B = B
结束
结束
结束
6个评论
Anitha Limann
2021年10月14日
肯定的是,
T = [10:5:90];
六世= 3.6,3.7,3.9,4.1,4.2,4.3,4.4,4.4,4.5,4.6,4.65,4.7,4.7,4.75,4.8,4.82,4.85);
谢谢你!
马修•诺伊
2021年10月14日
你好
我对你的方程式有疑问
请参阅下面的两个示例。根据vl>vs1或vl
你确定等式中没有错误(比如哪里少了腹肌)吗?
代码
clc
clearvars
% t = [10:5:90];
%六世= (3.6,3.7,3.9,4.1,4.2,4.3,4.4,4.4,4.5,4.6,4.65,4.7,4.7,4.75,4.8,4.82,4.85);
% vs1, vs2, d1,d2和z都是常数值。
vs1 = 3.6;
vs2 = 4.7;
d1 = 2.9;
d2 = 3.2;
z = 40;
%为t1和vl1选择起始对。(在本例中,t=10, vl = 3.61)。
%计算A
%计算B
%计算A-B
%测试abs(A-B);如果abs(A-B) < 0.001停止,则转到8。如果没有,请转6
%增量vl=vl+0.005
% goto 2。
%增量t=t+5
% goto 1
最后绘制A=B的每一对图(近似,在给定公差范围内)
% case 1
t = 10
Vl = 3.61%略高于vs1=3.6;
=每股((vs2 ^ 2)。* d2。* (i -(1 -(六世^ 2 / vs2。^ 2)))。/ (vs1 ^ 2)。* d1。* (i -(1 -(六世^ 2 / vs1。^ 2))))
B =(((2。*π。* z)。/(六世。* t))。* (sqrt((六世^ 2 / vs1。^ 2)1)))
% case 2
t = 10
Vl = 3.51%略低于vs1=3.6;
=每股((vs2 ^ 2)。* d2。* (i -(1 -(六世^ 2 / vs2。^ 2)))。/ (vs1 ^ 2)。* d1。* (i -(1 -(六世^ 2 / vs1。^ 2))))
B =(((2。*π。* z)。/(六世。* t))。* (sqrt((六世^ 2 / vs1。^ 2)1)))
给:
情况1:
T = 10
Vl = 3.6100
A = 0.0000 + 0.9856i
B = 0.5193
情况2:
T = 10
Vl = 3.5100
A = 1.1665
B = 0.000 + 1.5911i
接受的答案
马修•诺伊
2021年10月15日
你好,Anitha
所以你的方程确实有个小错误
当你计算A的时候,你翻转了这些项
(vs1 ^ 2)。* d1。* (i -(1 -(六世^ 2 / vs1。^ 2)))
必须由
(vs1 ^ 2) * d1 * (sqrt((六世^ 2 / vs1 ^ 2) 1))
这就是为什么我得到的是复数而不是实数因为根号下的ter是负的
我还在做代码....
6个评论
马修•诺伊
2021年10月18日
你好
这是代码
我添加了一个图来查看错误(err = abs(a - b))在迭代过程中如何演变
我发现vl的增量步长(vl = vl + 0.005)在我看来太粗糙了,所以最小误差不会低到足以达到abs(A-B) < 0.001的条件
所以我尝试了一个较小的增量,它工作得很好
这是vl = vl + 0.005的图
你可以看到最小误差在10^-3以上,所以我们不会遇到abs(A-B) < 0.001,代码将不会迭代
随着减少增量vl = vl + 0.0001,代码工作良好,我们得到了所有17点的结果
我的代码是:
clc
clearvars
关闭所有
T = [10:5:90];
六世= (3.6,3.7,3.9,4.1,4.2,4.3,4.4,4.4,4.5,4.6,4.65,4.7,4.7,4.75,4.8,4.82,4.85);
% vs1, vs2, d1,d2和z都是常数值。
vs1 = 3.6;
vs2 = 4.7;
d1 = 2.9;
d2 = 3.2;
z = 40;
%为t1和vl1选择起始对。(在本例中,t=10, vl = 3.61)。
%计算A
%计算B
%计算A-B
%测试abs(A-B);如果abs(A-B) < 0.001停止,则转到8。如果没有,请转6
%增量vl=vl+0.005
% goto 2。
%增量t=t+5
% goto 1
最后绘制A=B的每一对图(近似,在给定公差范围内)
%从pair 1开始
K = 1;
t = t (k);
vl = vl (k);
%初始化
Ci = 1;
Vl_svg = [];
SVG = 1;
图(1)
重对数(svg)
持有在
%仅用于调试
Max_samples = 10000;
%%主回路
而1无限循环,直到达到一个“中断”条件
万一主回路故障,安全断开,永远避免无限循环
%仅用于停止,即使使用vl = vl + 0.005和
%不满足(abs(AminusB) < 0.001)条件
如果Ci > max_samples%
%%%%%%%%%%% debug
重对数(svg)
包含(循环迭代的)
ylabel ('err = abs(A-B)')
Ci = 1;%重置计数器
SVG = 1;%重置SVG矢量
%%%%%%%%%%% debug
打破
结束
%计算A, B, A-B
numA = (vs2²)*d2*(√(1-(vl²/vs2²)));
denA = (vs1²)*d1*(√((vl²/vs1²)-1));此处百分比修正
A = atan(numA/denA);
B =(((2。*π。* z)。/(六世。* t))。* (sqrt((六世^ 2 / vs1。^ 2)1)));
AminusB = A-B;
%增量
% vl = vl + 0.005;%增加
Vl = Vl + 0.0001;我必须减少增量,否则我们永远无法满足腹肌(AminusB) < 0.001
%%%%%%%%%%%%%% debug only %%%%%%%%%%%%%%
svg(ci) = abs(AminusB);只是为了好玩;绘制每次运行的收敛曲线
Ci = Ci +1;%增量循环索引
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
如果abs(AminusB) < 0.001
%保存结果(vl的最优值存储在vl_svg(k)中的第k次迭代中)
Vl_svg (k) = vl;
Ci = 1;%重置计数器
% debug
重对数(svg)
包含(循环迭代的)
ylabel ('err = abs(A-B)')
SVG = 1;%重置SVG
%更新输入数据(下一个T和VL值)
% t = t+5;可以通过:k = k+1;t = t (k);%从列表中挑选
K = K +1;
如果长度(T)%停止条件:退出(所有迭代完成)
打破
结束
t = t (k);
结束
结束
%显示命令窗口中的数据(如果不为空)
如果~ isempty (vl_svg)
vl_svg
结束
所获得的% %结果为:
%
% vl_svg =
%
列1到9
%
% 3.6745 3.7531 3.8484 3.9518 4.0549 4.1510 4.2358 4.3077 4.3674
%
第10至17列
%
% 4.4163 4.4562 4.4889 4.5159 4.5382 4.5568 4.5725 4.5858
Anitha Limann
2021年10月19日
编辑:Anitha Limann
2021年10月19日
你好,
我写了这个代码,我得到了一些类似于预期的图。如你所见,模型图用红星标出。模型图也应该是一条曲线,它接近观察到的相同形状,但出于某种原因,我得到了这条直线。如果你不介意,你能帮我看看这个,帮我找出我的错误吗?
VL与T的曲线。
%%观察到的Love波色散数据;
Tob = (10:5:90);% s
VLob = [3.6 3.7 3.9 4.0 4.2 4.3 4.4 4.45 4.5 4.6 4.65 4.7 4.75 4.8 4.82 4.85 4.9];%公里/秒
图(2);
情节(Tob VLob,“b +”)%观察图
持有在;
网格
% %
T = 10;% s
Tmax = 90;% s
Vl = 3.61;%公里
vs1 = 3.6;
vs2 = 4.7;
d1 = 2.9;
d2 = 3.2;
z = 40;
dt = 5;
dv = 0.05:用%代替条件"VL = VL+0.005"的0.005
为T = T: dt:最高温度
A =每股(vs2 ^ 2) * D2 * (i -(1 -(六世^ 2 / vs2 ^ 2))) / (vs1 ^ 2) * D1 * (sqrt((六世^ 2 / vs1 ^ 2) 1)));
B = (((2*pi*z)/(VL*T))*(√((VL^2/vs1^2)-1)));
如果abs (a - b) < 0.001
图(2)
情节(T,六世的r *)
持有在;
打破
其他的
六世=六世+ dv;
图(2)
情节(T,六世的r *)
结束
结束
马修•诺伊
2021年10月25日
你好
目前,我只是将数据图添加到我的代码中
我得到了这个图(不是一条直线)
代码:
clc
clearvars
关闭所有
T = [10:5:90];
%六世= (3.6,3.7,3.9,4.1,4.2,4.3,4.4,4.4,4.5,4.6,4.65,4.7,4.7,4.75,4.8,4.82,4.85);
Vl = [3.6 3.7 3.9 4.0 4.2 4.3 4.4 4.45 4.5 4.6 4.65 4.7 4.75 4.8 4.82 4.85 4.9];%公里/秒
% vs1, vs2, d1,d2和z都是常数值。
vs1 = 3.6;
vs2 = 4.7;
d1 = 2.9;
d2 = 3.2;
z = 40;
%从pair 1开始
K = 1;
t = t (k);
vl = vl (k);
%初始化
Ci = 1;
Vl_svg = [];
SVG = 1;
图(1)
重对数(svg)
持有在
%仅用于调试
Max_samples = 10000;
%%主回路
而1无限循环,直到达到一个“中断”条件
万一主回路故障,安全断开,永远避免无限循环
%仅用于停止,即使使用vl = vl + 0.005和
%不满足(abs(AminusB) < 0.001)条件
如果Ci > max_samples%
%%%%%%%%%%% debug
重对数(svg)
包含(循环迭代的)
ylabel ('err = abs(A-B)')
Ci = 1;%重置计数器
SVG = 1;%重置SVG矢量
%%%%%%%%%%% debug
打破
结束
%计算A, B, A-B
numA = (vs2²)*d2*(√(1-(vl²/vs2²)));
denA = (vs1²)*d1*(√((vl²/vs1²)-1));此处百分比修正
A = atan(numA/denA);
B =(((2。*π。* z)。/(六世。* t))。* (sqrt((六世^ 2 / vs1。^ 2)1)));
AminusB = A-B;
%增量
% vl = vl + 0.005;%增加
Vl = Vl + 0.0001;我必须减少增量,否则我们永远无法满足腹肌(AminusB) < 0.001
%%%%%%%%%%%%%% debug only %%%%%%%%%%%%%%
svg(ci) = abs(AminusB);只是为了好玩;绘制每次运行的收敛曲线
Ci = Ci +1;%增量循环索引
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
如果abs(AminusB) < 0.001
%保存结果(vl的最优值存储在vl_svg(k)中的第k次迭代中)
Vl_svg (k) = vl;
Ci = 1;%重置计数器
% debug
重对数(svg)
包含(循环迭代的)
ylabel ('err = abs(A-B)')
SVG = 1;%重置SVG
%更新输入数据(下一个T和VL值)
% t = t+5;可以通过:k = k+1;t = t (k);%从列表中挑选
K = K +1;
如果长度(T)%停止条件:退出(所有迭代完成)
打破
结束
t = t (k);
结束
结束
%显示命令窗口中的数据(如果不为空)
如果~ isempty (vl_svg)
vl_svg
结束
图(2);
情节(T,六世“b +”T vl_svg的r - *)%观察和计算数据
传奇(的观测数据,计算数据的);
更多答案(0)
发生错误
由于对页面所做的更改,无法完成操作。重新加载页面以查看其更新后的状态。
您也可以从以下列表中选择网站:
如何获得最佳的网站性能
选择中国网站(中文或英文)以获得最佳的网站表现。其他MathWorks国家网站没有针对从您的位置访问进行优化。