как изменение функции в цикле с помощью команды newtonsys matlab - PullRequest
0 голосов
/ 23 апреля 2011

Я хочу изменить переменную функции на каждом шаге цикла for в matlab.я делаю эти шаги: я создал свою функцию mfile

function [jfun,fun]=air(x,vt,ty,tz,p2,y0)

    jfun=[(cos(tz)*cos(ty)*vt/9.81)*(1-exp(-9.81*x(2)/vt)),...
          x(1)*cos(tz)*cos(ty)*exp(-9.81*x(1)/vt);
          (-vt*sin(tz)*cos(ty)/9.81)*exp(-9.81*x(1)/vt),...
          (x(1)*sin(tz)*cos(ty)*+vt)*exp(-9.81*x(1)/vt)];
    fun=[(x(1)*cos(ty)*cos(tz)*vt/9.81)*(1-exp(-9.81*x(2)/vt))-p2;...
        (vt/9.81)*(x(1)*sin(tz)*cos(ty)+vt)*(1-exp(-9.81*x(2)/vt))-vt*x(2)+y0];
end

, а затем я использовал команду newtonSys:

ty=rad(-23)
tz=rad(15)
p2=1.8
vt=8.4925
y0=0.2
myfun=@(x)air(x,vt,ty,tz,p2,y0)
x=newtonSys(myfun,[15 5],0.000001,0.000001,500,1)

и ответ matlab: ошибка в ==> Untitled18 при 7 x = newtonSys(myfun, [15 5], 0.000001,0.000001,500,1) Я предполагаю, что это из-за неправильного использования дескриптора функции, и для моей функции я должен использовать другую команду, или я должен использовать другой метод для решения 2 нелинейного уравнения.

1 Ответ

1 голос
/ 24 апреля 2011

Во-первых, вы не отобразили всю ошибку.MATLAB должен сообщить вам, что является настоящей ошибкой, поэтому, если вы не сообщите нам об этом, мы не узнаем, в чем дело.

Во-вторых, я не вижу newtonSys в моей системе или в онлайн-документации MATLAB.,Так что, скорее всего, это внешняя программа, с которой большинство людей здесь могут быть не знакомы.Наиболее близким из быстрого поиска в Google я нашел this , который является реализацией метода Ньютона для аппроксимации корня нелинейной системы n-уравнений.Вы используете тот же файл?Если это так, если вы посмотрите на комментарии, это говорит о том, что вам нужно передать функцию в виде строки.Таким образом, вам нужно было бы передать myfun как 'myfun'.

Если нет, можете ли вы отредактировать свой вопрос и добавить содержимое функции, которую вы используете?Без них почти невозможно ответить на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...