Электростальский форум
Hi-Tech => Компьютеры, периферия, мультимедиа и ПО => Тема начата: LEO от 03.04.07, 17:08:25
-
собсно нужна функция вида f(x) которая ставила бы в соответствие x его ближайшее значение из ряда Е24 ... кто знаком с маткадом - может подскажете встроенную функцию, или как реализовать?
-
<<собсно нужна функция вида f(x) которая ставила бы в соответствие x его
ближайшее значение из ряда Е24 ... кто знаком с маткадом - может подскажете
встроенную функцию, или как реализовать?>>
LEO
Я попробовал проанализировать ряд 1.0, 3.3, 10, 33, 100, 330 и написать функцию f(x), но это ничего не дает.
Тогда попробовал последовательность 1.0, 1.1, 1.2, 1.3, 1.4 ... 910, то получилось вот что:
Пусть
1 элемент 1.0
2 элемент 1.1
3 элемент 1.2
и т.д. до 910
то тогда Y=f(X) и получается:
Y1=1.0+(1/10-0.1)
Y2=1.0+(2/10-0.1)
...
Yn=1.0+(n/10-0.1)
Но найдем уравнение под n
n=10*[(Yn-1.0)+0.1]
Подставляем значения:
Допустим Yn=910, тогда
n=10*[(910-1)+0.1]
n=10*[909+0.1]
n=10*[909.1]
n=9091
Может тебе это нужно?
И это так ли?
Я написал программу на VBS - попробуй
'*******************************************************************
' Автор LEND
' Имя программы: Leo.vbs
' Язык: VBScript
' Описание: ... Ближайшее значение из ряда Е24 и т.д.
'*******************************************************************
'Определить значение ряда Е24
'Пусть дан элемент под номером 24
i=24
' тогда
y=1.0+(i/10-0.1)
MsgBox "Значение элемента под номером " & i & " равно " & y
'--------------------------------------------------
'Найдем кол. элементов ряда Е24 на протяжении n=3
Set WshShell=WScript.CreateObject("WScript.Shell")
n=3
For i=1 To n
y=1.0+(i/10-0.1)
WScript.Echo "i=" & i & " y=" & y
Next
'-------------------------------------------------
'Найдем n для значения из ряда Е24
'Выберем 3.3 т.е. y=3.3
' Найдем n при y=3.3
y=3.3
n=10*((y-1.0)+0.1)
MsgBox "Номер значения для элемента ряда E24 " & y & " равно " & n
'-------------------------------------------------
Если задача решается таким способом, то можно написать и на JAVA
LEND
-
ближайшее х можно найти записав все значения ряда в массив, и задавая х сравнить их с последним большим(меньшим) членом массива применяя простейший цикл until.отсюда и узнаем номер элемента массива, а затем значение члена массива значению функции.
-
ребята, спасибо, но алгоритм составить или написать на VB программу с такой функцией я и сам за пару минут могу =)
а как эту дрянь в маткад потом пихнуть, я не знаю. там тоже есть возможность программирования, но... нормально этого там не сделать, я по крайней мере ниасилил =)
пытался внедрять как-нибудь через объекты и т.п. - все равно фигня получается...
там можно задать функцию вида
F(x)= | a if x < n1
| b if x < n2
| ..... и т.д.
короче через условия...
по-идее это и есть решение... только вбивать 72 строчки вот так =) и еще считать ni для каждой (это середина интервала, чтобы ф-ция возвращала ближайшее значение из ряда)
... это гемор...
но я попытался... сделать в AutoIt скрипт... для начала просто потестить...
WinActivate("Mathcad")
Sleep(100)
for $i=1 to 72
send ("1",0)
send ("+]",0)
send ("{RIGHT}",0)
Next
MsgBox(0, "Test","Finish")
но он не работает... 1 посылается нормально, а клавиша ] и shift + ] - нет.
так что вот сижу и думаю... )))
п.с. Mathcad 14
-
Leo
Я не работаю с Маткад. А как ты занесешь все значения ряда в массив(72 значения)?
Ручным способом. Ведь не зная функции ты можешь это сделать только таким способом.
Найти функцию для создания такой и таких цепочек не так уж и просто, тем более там присутствуют
дробные числа. Значения в указанном массиве Е24 меняются особо. Конечно, если постараться - можно
занести эти данные программно - но это если хорошо подумать, т.е. занести все 72 значения в массив.
-
LEND, да если б не эта дураццкая совершенно система ввода в маткад, было бы все давно решено, в удобстве ввода имхо коммандная строка рулит, зато в каде все выглядит наглядно, и можно в начале значения поменять, формулы ниже пересчитаются...
правда, установил маткад14 (типа новый), посмотрел whats new =) мда... символьные вычисления, которые в максиме были с незапамятных времен =) наконец-то он производные правильно считает =)
а вообще надо попробовать эксиом и мепл, может там дело обстоит лучше. у кого есть последние версии?
LEND
ряд - это скрин из pdf-ридера. значения можно скопировать. можно написать прогу, которая с помощью sendkeys вобъет в маткад нужную функцию. правда, как я писал - не вышло =)
п.с. преимущество "программного вбивания" конечно не в затраченном времени, прогу даже дольше писать, зато вероятность ошибок и очепяток меньше =)
ну и интереснее это )))
-
Наверно в Маткаде функцию можно подобрать под эту цепочку.
Можно конечно ввести эти цифры, можно ввести в файл, а потом подъсоединить их в программу.
Я попробую написать такую программу, избигая ввода цифр, с помощью подобранной мной выше функцией.
Попробую... т.е. программно ввести цифры 1.0, 1.1, 1.1, 1.3... 910
А потом можно сделать то, что выразил yurez
<<ближайшее х можно найти записав все значения ряда в массив, и задавая х сравнить их с последним большим(меньшим) членом массива применяя простейший цикл until.отсюда и узнаем номер элемента массива, а затем значение члена массива значению функции.>>
LEND
-
LEND, спасибо еще раз. думаю игра не стоит свеч ))
повторюсь - задача - вставить функцию в маткад, чтобы ее потом использовать
т.е. например
f(x):=......
a:=5
b:=f(a)
проблема - как вбить функцию в маткад.
2 варианта:
вбить 72 строки
вбить программу
1й вариант - лениво, еще можно ошибится при вводе. зато просто ))
2й - гемор, надо изучать как работает система программирования в маткаде...
строк по-меньше, может... не на много, тот же массив все равно придется ручками забит... вставка из буфера вставляет как текст, и как формула это работать не будет. ((
как сделать, чтобы работало - не знаю. не нашел.
есть правда там специальная вставка - но это для других целей.
скрин1 - кусок хелпа из маткада,
скрин2 - спец. вставка...
повторюсь, большое всем спасибо, но не стоит тратить на это ваше время, мне эти округления по ряду надо делать менее 10 раз, в общем-то ))
просто я надеялся, что есть "простой путь", а его не оказалось.
-
Я уже написал. Отправлю ВАМ в личку. Сами решите, может понадобиться.
LEND
LEO: Спасибо.