2015-08-19 2 views
0

У меня возникла проблема, и вы, ребята, могли мне помочь.Решение неявной функции в MATLAB без цикла

В Matlab, я пытаюсь решить неявную функцию, видит следующее:

Cp = Cpi/( sqrt(1 - M^2) + (M^2/(sqrt(1-M^2))) * Cpi/2) 

Здесь, я знаю, что значения как М и Cp и хочу знать значение Cpi. Кроме того, из-за соображений вычислительного времени я хотел бы избежать использования циклов в подходе.

Наконец-то я знаю, что это не сложно решить, например, можно использовать метод «золотой би-сечение», чтобы найти ответ, однако я не знаю, как закодировать его в MATLAB. Кто-нибудь знает или имеет код, который может решить для Cpi?

Спасибо, ребята! высоко ценится за вашу помощь

+1

Почему бы вам просто не переписать функцию в форму Cpi = ... Я только что сделал это на листе бумаги за 5 секунд, просто напишите этот код в Matlab. – Adriaan

+0

Его неявное, поэтому вы не можете это сделать –

+0

Это только подразумевается при определенных условиях. Попробуйте 'syms Cp Cpi M;' 'solve (Cp == Cpi/(sqrt (1-M^2) + M^2/sqrt (1-M^2) * Cpi/2), Cpi)', чтобы получить аналитическое решение, которое согласуется с примером в ответе @ StewieGriffin. – horchler

ответ

3

Это довольно легко сделать, используя fzero. При перемещении Cp часть к ОРЗ, и попытаться найти корень, используя fzero с Cpi в качестве переменной, вы можете решить, как это:

M = 0.4; Cp = 3; 
f = @(Cpi) Cp - (Cpi/( sqrt(1 - M^2) + (M^2/(sqrt(1-M^2))) * Cpi/2)); 

fzero(f,0) 
ans = 
    3.7250 

Конечно, вам не нужно назначить это для анонимной функции, но, на мой взгляд, это упрощает чтение.

+0

спасибо, это то, что я искал –

Смежные вопросы