Интервал значений

Интервал значений - Сообщения

#1 Опубликовано: 03.02.2009 15:28:05
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Доброго всем времени суток!

Во-первых, большое спасибо разработчикам за программу, особенно ее версию для КПК! Ведь всегда последние расчеты к докладу проводятся в поезде по дороге на конференцию:d

У меня такой вопрос:
Как задать интервал значений для переменной (т.е а:=1 - 10 с шагом 1)?
#2 Опубликовано: 03.02.2009 16:05:14
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Приветствую.
Первое, что приходит в голову это использовать цикл для заполнения вектора

(скачать пример)

В следующей версии программы будет выделенная функция для таких операций (1...10), т.ч. будет проще.
#3 Опубликовано: 04.02.2009 14:38:37
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Спасибо за быстрый ответ!
Но у меня появился другой вопрос (сразу извиняюсь за тупость ):
А как ввести (на КПК) a1j:=j?
И еще одно: можно ли где-то скачать более-менее подробную инструкцию, или хотя-бы мини-FAQ по основным функциям программы, способам ввода значений и т.д. Тогда глупых вопросов было бы поменьше.
#4 Опубликовано: 04.02.2009 15:29:54
XroM

XroM

0 сообщений из 23 понравились пользователям.

Группа: User

Меню - Вставка -Функция - матрицы и векторы - el() (там ниже показан формат функций)
или просто с клавиатуры el(a;1;j)
#5 Опубликовано: 04.02.2009 17:33:40
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Позволю себе чуть дополнить: ещё для Desktop версии удобно использовать клавишу "[" (для КПК тоже можно, если позволяет экранная клавиатура).

А вот инструкция - больной вопрос. Её начало есть и она очень постепенно наполняется, но до публикации ещё очень далеко. На данный момент данный форум - максимум, что есть "о программе".

Далее не обращайте внимания - крик души: "Технические писатели альтруисты, где Вы? Отзовитесь!".
#6 Опубликовано: 14.07.2009 11:48:05
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Wrote

В следующей версии программы будет выделенная функция для таких операций (1...10), т.ч. будет проще.



Уже есть? Извините, что сам не слежу
#7 Опубликовано: 14.07.2009 12:20:32
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Да, уже есть. Функция называется range(..). Пишите с клавиатуры "range(;" и получите:
[MATH]range(#;#)[/MATH]
или "range(;;" - получите:
[MATH]range(#;#;#)[/MATH]

Ну а вот примеры:
[LIVE width=369 height=222]http://smath.info/live/?file=544[/LIVE]
#8 Опубликовано: 14.07.2009 12:23:42
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Большое спасибо!!!! И за оперативный ответ, и за функцию.
#9 Опубликовано: 14.07.2009 13:26:02
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Опять проблемка:

вводим x:=1; 2 .. 3
дальше y(x):=x^2
результат y(x)=14.
Программа просумировала квадраты значений. А как получить интервал значений y(x)?
#10 Опубликовано: 14.07.2009 13:56:43
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

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

Спасибо, продолжим совершенствовать программу.
#11 Опубликовано: 14.07.2009 14:00:51
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Кстати, проверил: если задавать y(x):=x+2, то получаем масив
#12 Опубликовано: 14.07.2009 14:23:28
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Не совсем так. Дело в том, что при сложении вектора со скаляром каждый элемент вектора складывается с этим скаляром, т.е. в данном случае результат операции просто аналогичен результату операции между массивом и скаляром.

Странно другое - я проверил аналогичные вычисления в Mathcad и такого не ожидал - посмотрите на скриншот:


Т.е. в Маткаде возведение вектора в степень не равно умножению вектора на себя самого указанное степенью количество раз! Это для меня новость. Попробую разобраться подробнее в чём тут дело...
#13 Опубликовано: 14.07.2009 14:33:08
Andriy

Andriy

0 сообщений из 8 понравились пользователям.

Группа: User

Хочу немножко уточнить. Во-первых, я не математик, а химик. А данная программа мне интересна с точки зрения альтернативы Маткаду. Во-вторых, я имею дело со следующей задачей (в основном): задан интервал значений x, потом с КАЖДЫМ этим x проводятся операции, иногда для каждого вычисляется интеграл, потом все это - на график.
Схематически это выглядит так:
x(от 1 до 10) -> y(x) -> z(y(x), x) -> gz (y(x)), y(x), x)

И график зависимости g(z (y(x)), y(x), x) от х.

Извините за сумбурное изложение.
#14 Опубликовано: 14.07.2009 15:16:06
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Не уверен, что точно понял, что требуется, но вот пример, от которого можно будет отталкнуться:

Скачать: multi_fun_plot.sm.
#15 Опубликовано: 19.07.2009 07:24:48
Valery Ochkov

Valery Ochkov

55 сообщений из 633 понравились пользователям.

Группа: User

Wrote

У меня такой вопрос:
Как задать интервал значений для переменной (т.е а:=1 - 10 с шагом 1)?



Некоторые соображения по поводу переменной-интервала (Range Variable).
Она была введена в самую первую версию Mathcad, где не было программирования, в первую очередь для построения графиков:
y(x):=...
x:=-10,-9.9..10
далее строим график (нажимаем @)
Пример http://twt.mpei.ac.ru/ochkov/Mathcad_12/1_64_Plot_Y1_Y2.png
Или для создания вектора или матрицы:
i:=0..99 V[i:=123*i-0.124
Потом (Mathcad 6) в пакет было введено программирование и график стало возможным строить, создав программированием (цикл for) два вектора X (дискретные значения аргумента x) и Y(дискретные значения функции y)
Пример графика без пограммирования, но любые вектора можно создать циклом for: http://twt.mpei.ac.ru/ochkov/Mathcad_14/Chapter1rus/68.png
В этой ситуации переменная-интервал стала излишней, но ее оставили, учитывая правило совместимости со старыми версиями Mathcad. Более того, эти два типа данных часто конфликтуют: перевод переменной-интервала в вектор - это "целая песня" и с этой проблемой многие намучались: в расчете, например, есть два объекта, имеющие вид вектора (собственно вектор и переменная-интервал одной длины), но сложить их элементы очень сложно, а для многих просто невозможно...
В Smath программирование есть изначально и, следовательно, от переменной-интервала (более слабый инструмент, конфликтующий с более мощным) можно сразу отказаться, "не перегружая корабль".
А мы-то знаем, что такая перегрузка, связанная с требованием совместимости, погубила не один "корабль"!

Кстати, когда русифицировался Mathcad 14, то по поводу перевода термина Range Variable были самые горячие споры. Остановились на термине "переменная-интервал", хотя это в какой-то мере компромисс. Термин-калька "ранжированная переменная", фигурирующий во многих неофициальных русских версиях Mathcad и во многих книгах, был сразу отвергнут.
#16 Опубликовано: 20.07.2009 23:56:42
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

OchkovVF, большое спасибо за интересную информацию.

Range (просто Range, т.к. в программе это просто функция) была введена в нашу программу тоже, можно сказать, для обеспечения совместимости... совместимости пользователей Mathcad в работе со SMath Studio Думаю, не секрет, насколько важно это для популяризации проекта.

Знаю, что в Mathcad с помощью Range Variable можно решить множество задач помимо простой генерации массивов, т.ч. в дальнейшем эта возможность всё же будет совершенствоваться и здесь.

На текущий момент понятия "массив" (Array) в SMath Studio нет, а потому все действия по работе с коллекциями данных я предложил выполнять с помощью векторов (и матриц), что автоматически исключает проблему несовместимости типов данных. Однако очень важно, что бы пользователи понимали, что арифметические действия над векторами и матрицами подчиняются правилам математики, а потому, для проведения действий над выражениями в элементах векторов и матриц нужно использовать циклы. На текущий момент другого способа нет. А что б упростить работу, с моей стороны, нужно вводить настоящие массивы и мысли по реализации массивов у меня есть, но пока не знаю, стоит ли усложнять программу ими (взвешиваю все "за" и "против").
#17 Опубликовано: 02.12.2009 06:33:11
sun3

sun3

0 сообщений из 13 понравились пользователям.

Группа: User

Wrote

Да, уже есть. Функция называется range(..). Пишите с клавиатуры "range(;" и получите:
[MATH]range(#;#)[/MATH]
или "range(;;" - получите:
[MATH]range(#;#;#)[/MATH]

Ну а вот примеры:
[LIVE width=369 height=222]http://smath.info/live/?file=544[/LIVE]





Получилось ввести диапазон x←range(1;10). Но вычислять введенную формулу f(x)←nthroot(exp(2,2*x);3)-abs(sin((π*x)/{x+2/3}))+1,7 программа не хочет Как быть?
Странно: функцию не хочет считать, а график построил, хм...
#18 Опубликовано: 02.12.2009 13:36:11
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Wrote

Как быть? Странно: функцию не хочет считать, а график построил, хм...


Дело в том, что нельзя посчитать заданную Вами функцию от вектора, коим является результат работы функции range. Однако не сложно организовать цикл для просчёта функции от каждого элемента вектора в отдельности:


(скачать файл)
#19 Опубликовано: 03.12.2009 02:46:01
sun3

sun3

0 сообщений из 13 понравились пользователям.

Группа: User

Скачала решение, спасибо Вам большое! Только у меня ответ не выводится "Длина выражения слишком велика для корректного его отображения," - это подпись к циклу. В чём может быть проблема? Программу скачала с этого сайта, версия 0,85 (сборка 3531), дата 01.09.09.
#20 Опубликовано: 03.12.2009 08:42:20
Andrey Ivashov

Andrey Ivashov

2270 сообщений из 3734 понравились пользователям.

Группа: Super Administrator

Wrote

Только у меня ответ не выводится


Ответ выведен после надписи y= под циклом. То, что у Вас не отображается - лишь подсказка.
Wrote

В чём может быть проблема?


Ну собственно в этом и проблема: "Длина выражения слишком велика для корректного его отображения" В подсказках программа отображает символьное решение, а оно, в данном случае, получается очень длинным. Программа понимает, что слишком большая подсказка всё равно никому ничем не поможет (особенно если её размер больше размера дисплея) и не отрисовывает её. Если символьное решение необходимо увидеть, то просто посчитайте интересующие Вас значения под циклом символьно. Вот пример:
[MATH]y—mat({17+10*(nthroot(exp(11/5);3)-abs(sin({3*π}/5)))}/10;{17*sqrt(2)+10*(-1+nthroot(exp(22/5);3)*sqrt(2))}/{10*sqrt(2)};{17+10*(nthroot(exp(33/5);3)-abs(sin({9*π}/11)))}/10;{17+10*(nthroot(exp(44/5);3)-abs(sin({6*π}/7)))}/10;{17+10*(nthroot(exp(11);3)-abs(sin({15*π}/17)))}/10;{17+10*(nthroot(exp(66/5);3)-abs(sin({9*π}/10)))}/10;{17+10*(nthroot(exp(77/5);3)-abs(sin({21*π}/23)))}/10;{17+10*(nthroot(exp(88/5);3)-abs(sin({12*π}/13)))}/10;{17+10*(nthroot(exp(99/5);3)-abs(sin({27*π}/29)))}/10;{17+10*(nthroot(exp(22);3)-abs(sin({15*π}/16)))}/10;10;1)[/MATH]
  • Новые сообщения Новые сообщения
  • Нет новых сообщений Нет новых сообщений