Задать вопрос
@DavidAlroy

Ошибка кода scilab. Как исправить?

Здравствуйте, суть вопроса в том, что мне дали код на scilab, который должен решать уравнение и выводить значения на графике. Проблема не в самом описании формулы, а в ошибке, которая появляется при попытке запустить код. Сам я этот язык не знаю и не могу понять в чём именно заключается проблема.

// Задаем константы
m = 9.11e-31; // масса электрона в кг
hbar = 1.055e-34; // постоянная Планка в Дж*с
eV_to_J = 1.602e-19; // перевод эВ в Дж

// Функция для решения дисперсионного уравнения
   function E_n = find_energy_levels(a, U0, n_levels)
    U0 = U0 * eV_to_J; // переводим U0 в Дж
    a = a * 1e-10; // переводим a в метры
    E_n = zeros(n_levels, 1); // массив для хранения значений энергии
    endfunction

    for n = 1:n_levels
        // Используем метод численного решения для нахождения E
        E = cotg (sqrt(2*m*E/hbar^2)*a) + sqrt(2*m*(U0 - E)/hbar^2) / sqrt(2*m*E/hbar^2);
        E_guess = n^2 * %pi^2 * hbar^2 / (2 * m * a^2); // начальное приближение
        E_n(n) = fsolve(E, E_guess); // решаем дисперсионное уравнение
    end

// Параметры задачи
a_values = [10, 20, 30]; // значения ширины ямы в Å
U0_values = [1, 5, 10]; // значения высоты ямы в эВ

// Находим и строим уровни энергии для каждого случая
for i = 1:length(a_values)
    a = a_values(i);
    U0 = U0_values(i);
    E_n = find_energy_levels(a, U0, 4); // находим первые 4 значения энергии
    
    // Отображаем результаты
    disp("a = " + a + " Å, U0 = " + U0 + " эВ");
    disp("Энергетические уровни (в эВ):");
    disp(E_n / eV_to_J); // выводим в эВ
    
    // Строим огибающие волновых функций
    x = linspace(0, a * 1e-10, 500); // массив координат x
    for n = 1:4
        k1 = sqrt(2 * m * E_n(n) / hbar^2);
        psi_n = sqrt(2 / a) * sin(k1 * x); // волновая функция для бесконечной ямы
        plot(x * 1e10, psi_n + n); // строим сдвинутую для наглядности
        hold on;
    end
    title("Волновые функции для a = " + a + " Å, U0 = " + U0 + " эВ");
    xlabel("x (Å)");
    ylabel("Ψ_n(x)");
    hold off;
    pause(1); // пауза между графиками
end


После цикла for выдаёт ошибку "fsolve: Неверный тип входного аргумента №1: ожидалась вещественная матрица." и в самом конце выдаёт ошибку "Неопределённая операция для указанных операндов.
проверьте или определите функцию %c_a_s для перегрузки."
С чем связана ошибка и как её можно исправить?
  • Вопрос задан
  • 13 просмотров
Подписаться 1 Простой 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы