0

次の matlab コード フラグメントを検討してください。

g = @(x, t)x.*0;
u_explizit = explizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1);
figure
surf(u_explizit);
shading flat;
title('Aufgabe 2 - Explizit Euler');

u_implizit = implizit_Euler(20, 800, 1, 1, zeros(21,1), g, [1;2], 0, 0.1);

両方の機能explizit_Eulerimplizit_Euler同じコマンドで開始します (ここではexplizit_Euler:

function [u] = explizit_Euler(n, nt, T, kappa, u0, f, b, gN, gD)

tau = T/nt;

[A, z] = prepare_system(n, f, b, gN, gD);
z = z';
...
end

関数prepare_systemは次のようになります。

function [ A, z] = prepare_system(n, f, b, gN, gD)
%PREPARE_MATRIX_SYSTEM Prepares A_h and solution vector f_h

    h = 1/n;
    z = f((0:n)./n);
...
end

prepare_systemfrom withinの呼び出しはexplizit_Euler問題なく機能します。ただし、内部からの呼び出しでimplizit_Eulerエラー メッセージが表示され、その理由がわかりません。

Subscript indices must either be real positive integers or logicals.
Error in implizit_Euler (line 5)
    z = f((0:n)./n);

matlab はfがベクトルであると考えているため、 にアクセスできないようですf(0)。これは、ベクトルである場合に意味fがあります。しかしf、関数ハンドルです! そして、まったく同じコードが 内の以前のコードで正常に機能するのはexplizit_Eulerなぜですか?

4

1 に答える 1

1

implizit_Euler(!)の署名にパラメーターを置き忘れました- 申し訳ありません。

于 2013-06-12T13:44:12.230 に答える