для цикла в Matlab - PullRequest
       0

для цикла в Matlab

0 голосов
/ 30 апреля 2011

Я хочу написать скрипт, который сначала запрашивает некоторые входные данные:

A = input('Enter a square matrix A: ');

и, если это не квадратная матрица, будет отображаться ошибка, а затем снова будет запрашиваться ввод матрицы A

и, основываясь на измерении A, программа в командной строке запрашивает следующие данные: (предположим, что размерность A равна 3)

Enter 3x1-matrix B: 
Enter 1x3-matrix C:

Затем запрашиваются начальные значения x (0), где они равны 3 x (0) в нашей ситуации:

The initial values:
x1(0): 
x2(0): 
x3(0): 

(Примечание: количество x (0) зависит от размера A. Мы можем сохранить начальные значения в переменных x1, x2 и x3)

Как я могу написать это в Matlab?

спасибо заранее!

=======================

моя попытка:

while(true)
A = input('Enter square matrix A: ');
sizeA = size(A);
if sizeA(1) == sizeA(2)
    break;
end
    display('Error: You have to enter square matrix!')
end
while(true)
B = input('Enter ' + sizeA(1) + 'x1-matrix B: ');
sizeB = size(A);
if sizeB(1) == sizeA(1) && sizeB(2) == 1
    break;
end
    display('Error: You have to enter ' + sizeA(1) + 'x1-matrix!')
end
while(true)
C = input('Enter 1x' + sizeA(1) + '-matrix C: ');
sizeC = size(A);
if sizeC(1) == 1 && sizeC(2) == sizeA(1)
    break;
end
    display('Error: You have to enter 1x' + sizeA(1) + '-matrix!')
end
display('The initial values: ');
% well, I don't know how to start writing the code for the initial values

========================

Наконец-то я получил то, что хочу

while(true)
A = input('Enter square matrix A: ');
sizeA = size(A);
if sizeA(1) == sizeA(2) && ndims(A) == 2
    break;
end
    display('Error: You have to enter square matrix!')
end
while(true)
B = input(['Enter ' , num2str(sizeA(1)) , 'x1-matrix B: ']);
sizeB = size(B);
if sizeB(1) == sizeA(1) && sizeB(2) == 1  && ndims(B) == 2
    break;
end
    display(['Error: You have to enter ' , num2str(sizeA(1)) , 'x1-matrix!'])
end
while(true)
C = input(['Enter 1x' , num2str(sizeA(1)) , '-matrix C: ']);
sizeC = size(C);
if sizeC(1) == 1 && sizeC(2) == sizeA(1)  && ndims(C) == 2
    break;
end
    display(['Error: You have to enter 1x' , num2str(sizeA(1)) , '-matrix!'])
end
display('The initial values: ');
for i=1:sizeA(1)
    x(i) = input(['Enter X' , num2str(i) , '(0): ']);
end

1 Ответ

3 голосов
/ 30 апреля 2011

Вы не показали нам, как далеко вы продвинулись или что вы пробовали.Помните, что SO - это не место, где мы просим вас сделать весь код, а просьба о помощи в решении конкретных проблем.

Однако я не хочу оставлять вас там без посторонней помощи.Итак, вы можете попробовать использовать следующие функции для написания вашего скрипта.Вы всегда можете отредактировать свое сообщение, чтобы задать более конкретный вопрос, если у вас работает основной скрипт.

  1. Посмотрите на функцию input для запроса ввода пользователя
  2. Используйте функцию error, чтобы выдать ошибку.
  3. Используйте size, чтобы получить размеры массива.Используйте два выходных аргумента, например [rows cols]=size(A), чтобы получить оба измерения.
  4. Недостаточно просто проверить, если rows==cols.Вам также нужно будет подтвердить, что есть только два измерения, используя ndims, так как если имеется более двух измерений, и вы запрашиваете только два вывода из размера, оно объединяет второе и более высокое измерения ввторой выход.В качестве примера посмотрите, что вы получаете за [rows,cols]=size(rand(4,2,2))
  5. . Вы можете использовать isequal вместе с некоторыми из вышеперечисленных, чтобы убедиться, что входные размеры для матриц B и C являются правильными.
  6. Вы можете сохранить свои начальные значения в виде ячейки, как предложено kwatford, или в виде вектора.Я не могу предположить, какой из них, не зная, что вы собираетесь с ним делать.

Надеюсь, это помогло вам начать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...