次の 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_Euler
とimplizit_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_system
from 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
なぜですか?