В моем коде for-циклов Matlab есть некоторые ошибки. Я хотел бы спросить, знает ли кто-нибудь, где ошибка

#matlab #for-loop

#matlab #для цикла

Вопрос:

Для функции из 3 переменных: f, ksid и rho я хочу выполнить поиск комбинации f и ksid, чтобы получить минимальный пик для кривой y-rho. Я использовал 3 ‘for loops’ для определения диапазона 3 переменных. minH5 — это значение минимального пика для кривой y-rho, p — индекс, который может помочь мне найти соответствующее значение f и ksid. Результат отличается от подходящей кривой, которую я нарисовал для сравнения. Я был бы очень признателен, если бы кто-нибудь мог указать, где ошибка.

 clear all
close all
m=0.01;
ksi=0.02;
f1=[];
ksid1=[];
f1=[];
max1f=[];
max1=[];
y1=[];
pe1=[];
H5e=[];

for  ksid=0.1:0.0001:0.12
 for f=0.85:0.0001:0.9
     for e=0.85:0.001:1.4
         y=((f.^2-e.^2).^2 (2.*ksid.*e.*f).^2).^0.5./((-f.^2.*e.^2.*m (1-e.^2).*(f.^2- 
e.^2)-4.*ksi.*ksid.*f.*e.^2).^2 4.*(ksi.*e.*(f.^2-e.^2) ksid.*f.*e.*(1-e.^2.*(1 m))).^2).^0.5;
         y1=[y1,y];
     end
     [H5e,pe]=max(y1);
     y1 = [];
     pe1=[pe1,pe];
     max1f=[max1f,H5e];
     f1=[f1,f];
 end
     ksid1=[ksid1,ksid]; 
end

[minH5,p]=min(max1f);
 

Комментарии:

1. Побочное замечание: увеличение векторов внутри циклов может замедлить работу вашей программы. Рассмотрите возможность выделения векторов / массивов заранее, например y1=nan([1 123456]); , с помощью . (Использование nan() , а не say zero() , обычно облегчает обнаружение ошибок.)

2. «Результат отличается от подгонки кривой» Итак, какой результат вы получаете? Какого результата вы ожидаете?

3. «минимальный пик для кривой» вы не ищете пики. Ваша max операция выполняется по всем y вычисленным значениям до сих пор, она не идентифицирует пики. Правильный способ сделать это — выполнить выборку всего пространства, сохранить все значения y в массиве, затем найти пики в этом массиве, а затем сравнить значения этих пиков.

4. Я вычислил ваш y , и я не вижу никаких пиков. Вы уверены, что уравнение правильное? А диапазоны, по которым вы осуществляете поиск?