Проблема Matlab с написанием уравнений - PullRequest
0 голосов
/ 09 апреля 2011

У меня проблемы с написанием уравнений.

r = 25, k = 2, R = 50: 25: 600, DR = 0.5: 0.5: 4.0

h = r *[1-cos (asin ((sqrt (2 * R * DR + DR ^ 2)) + r * sin (acos (rk) / r) / r))] - k

, но как результатя получаю это: h = 1.9118e + 001 + 1.7545e + 002i.

Я только начинаю с Matlab.Спасибо

Ответы [ 3 ]

2 голосов
/ 09 апреля 2011

Из того, что вы написали, я на самом деле получаю

??? Error using ==> mtimes
Inner matrix dimensions must agree.

это правильно, потому что вы пытаетесь умножить два вектора строки друг на друга. Не могли бы вы показать нам фактический код, который вы использовали?

В любом случае, предположив, что с этим как-то разбираются, мне кажется, что вы подаете что-то на asin, что намного больше 1. Это даст вам сложные результаты. То, что вы передаете asin, возможно, должно быть разделено на R^2 или DR^2 или что-то в этом роде? У вас есть похожая проблема чуть позже с аргументом acos.

Я также подозреваю, что некоторые из ваших операторов * и ^ и / должны быть поэлементными .*, .^, ./.

0 голосов
/ 10 апреля 2011

Если вы пытаетесь сделать, как вы сказали:

поэтому в первом уравнении я использовал R = 50, DR = 0.5, r = 25, k = 2 и мне нужно получить h. Во втором уравнении я использовал R = 75, DR = 1.0, r = 25, k = 2 ... для последнего уравнение я использовал R = 600, ДР = 4,0, г = 25, к = 2.

DR и R должны иметь одинаковую длину ... поэтому, если R идет между 50 и 600 с шагом 25, DR должен быть от 0,5 до 12,5 с шагом 0,5 или от 0,5 до 4,0 с шагом 0,1522 ...

как только вы это выясните, обязательно добавляйте точку перед каждой операцией умножения матриц (например, * или ^)

0 голосов
/ 09 апреля 2011

РЕДАКТИРОВАТЬ: формула немного скорректирована (в скобках), чтобы отразить успех в комментарии.

Когда вы говорите, что хотите таблицу, я думаю, это будет таблица R на DR (так как у вас естьна векторы разной длины).Для этого вам нужно использовать R как вектор-столбец (R' ниже) и умножить на * (не .*).Когда R не появляется в выражении, умножьте на ones(size(R)) (или используйте repmat), чтобы получить DR в нужной форме.Чтобы выровнять DR по элементу, вам нужно DR.^2.Кажется, для acos есть неуместная скобка, и вы обязательно поделите ее на r перед тем, как взять acos.Должно быть деление на что-то вроде r в asin (не r^2, потому что вы взяли sqrt).Наконец, последнее деление на r является избыточным, как написано, так как вы умножаете на r на том же уровне, что и раньше.В любом случае, если я сделаю следующее:

h= r*(1-cos(asin((sqrt(2*R'*DR+ones(size(R))'*DR.^2)/r)+sin(acos((r-k)/r)))))-k

я получу таблицу R на DR.Результаты для малых R,DR реальны;более высокие R,DR являются сложными из-за аргумента первого asin, являющегося> 1.Первая запись в таблице - 4,56, как вам требуется.

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