Создание 3D-функции с помощью Octave - PullRequest
0 голосов
/ 03 июня 2011

У меня проблема с графикой трехмерной функции - при вводе данных я получаю линейный график, и значения не складываются, если я выполняю вычисления вручную. Я считаю, что проблема связана с использованием матриц.

INITIAL_VALUE=999999;
INTEREST_RATE=0.1;
MONTHLY_INTEREST_RATE=INTEREST_RATE/12;

# ranges
down_payment=0.2*INITIAL_VALUE:0.1*INITIAL_VALUE:INITIAL_VALUE;
term=180:22.5:360;

[down_paymentn, termn] = meshgrid(down_payment, term);

# functions
principal=INITIAL_VALUE - down_payment;

figure(1);
plot(principal);
    grid;
    title("Principal (down payment)");
    xlabel("down payment $");
    ylabel("principal $ (amount borrowed)");

monthly_payment = (MONTHLY_INTEREST_RATE*(INITIAL_VALUE - down_paymentn))/(1 - (1 + MONTHLY_INTEREST_RATE)^-termn);

figure(2);
mesh(down_paymentn, termn, monthly_payment);
    title("monthly payment (principal(down payment)) / term months");
    xlabel("principal");
    ylabel("term (months)");
    zlabel("monthly payment");

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

1 Ответ

1 голос
/ 20 сентября 2011

Я попробовал ваш скрипт и получил следующую ошибку:

error: octave_base_value::array_value(): wrong type argument `complex matrix'
...

Ваш monthly_payment - сложная матрица (и не должно быть).

Полагаю, проблема в силовом операторе ^. Вы должны использовать .^ для поэлементных операций.

Из документации:

x ^ y
х ** у
Энергетический оператор. Если x и y оба являются скалярами, этот оператор возвращает x, возведенный в степень y. Если x - скаляр, а y - квадратная матрица, результат вычисляется с использованием разложения по собственным значениям. Если х квадратная матрица. результат вычисляется повторным умножением, если y является целым числом, и разложением по собственным значениям, если y не является целым числом. Если x и y являются матрицами, возникает ошибка.

Реализация этого оператора должна быть улучшена.

х. ^ У
х. ** у
Элемент от элемента питания оператора. Если оба операнда являются матрицами, количество строк и столбцов должно совпадать.

...