Задача Matlab с записью уравнений

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

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(r-k)/r)/r))]-k

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

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


person user699994    schedule 09.04.2011    source источник
comment
когда я использовал калькулятор, в результате я получил 4,56   -  person user699994    schedule 09.04.2011


Ответы (3)


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

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

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

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

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

person Gareth McCaughan    schedule 09.04.2011
comment
Ну, может быть, мой вопрос немного сбивает с толку. В результате мне нужно получить таблицу (или матрицу), поэтому в первом уравнении я использовал R = 50, DR = 0,5, r = 25, k = 2, и мне нужно получить h. Во втором уравнении я использовал R = 75, DR = 1,0, r = 25, k = 2 ... для последнего уравнения я использовал R = 600, DR = 4,0, r = 25, k = 2. - person user699994; 09.04.2011
comment
То же самое для acos(r-k), возможно, вы имеете в виду acos((r-k)/r) - person Emilio Silva; 09.04.2011

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

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

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

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

person Rasman    schedule 09.04.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, как вам и нужно.

person Ramashalanka    schedule 09.04.2011
comment
спасибо, я прислушался к вашим советам и компьютеру по частям, так что я, наконец, получил правильную формулу. Я просто взял r = 25, k = 2, R = 50, DR = 0,5 и включил в эту формулу h= r*[1-cos(asin((sqrt(2*RDR+DR.^2 )/r)+(rsin(acos((r-k)/r))/r)))]-k, и в результате получил 4,56. - person user699994; 10.04.2011