Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939

Получить данные для промежуточных значений

12.04.2023, 15:36. Показов 1416. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго дня! У меня есть результаты расчета в экселе которые зависят от параметра например площади (м2). И вот для площадей 500, 1000, 3000 м2 есть точные результаты расчета. Как можно получить например данные для площади 750 не прибегая к прямому расчету? Вроде как по аналогии с интерполяцией.

PS Предыстория. Есть программа которая долго-долго считает и выдает вот такие экселевские файлы. Я сначала думал сделать набор таких расчетов скажем с шагом площади 50, т.е. 50,100,150...3000... Потом пока делал понял что, всё равно шаг 50 большой, если уменьшить вообще много придется расчетов сделать.
Вложения
Тип файла: zip данные.zip (159.3 Кб, 15 просмотров)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
12.04.2023, 15:36
Ответы с готовыми решениями:

Составить программу для вычисления промежуточных значений функции y(x)
Составить программу для вычисления промежуточных значений функции y(x) (начальное и конечное вводятся с клавиатуры) в произвольной точке х....

Как получить входные данные, доступные для выбранных выходных значений нейронной сети?
Здравствуйте друзья! помогите пожалуйста я хочу узнать возможно ли получить входные данные доступные для выбранных выходных значений...

Вывод промежуточных значений
здравствуйте. помогите, пожалуйста, как сделать, чтобы выводились промежуточные вычисления в лейб или эдит(такие как массив а, r, b,x) ...

10
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
12.04.2023, 19:57
Михалыч, это интерполяция и есть..
Вот пример многомерной интерполяции: https://docs.scipy.org/doc/sci... te.interpn
В вашем случае также три переменные, X,Y и Z у вас: [500,1000,3000]
1
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
13.04.2023, 07:42
Лучший ответ Сообщение было отмечено Михалыч как решение

Решение

Михалыч, вот вариант, но считает интерполянт долго, минуты, зато когда он подсчитан, то одно сечение (площадь) считает за ~8-10 секунд.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np
import pandas as pd
from scipy.interpolate import LinearNDInterpolator
from scipy.spatial import Delaunay
 
xls_names='при 3000м2.xls','при 1000 м2.xls','при 500 м2.xls'
area=[3000, 1000,500]
res=[]
 
for Z,name in zip(area, xls_names):
    WS = pd.read_excel(name, header=None)
    WS_np = np.array(WS) 
    X=np.float32(WS_np[1:,0])
    Y=np.float32(WS_np[0,1:])
    print(name, np.min(X), np.max(X), np.min(Y), np.max(Y))
    Y,X=np.meshgrid(Y,X)
    V=np.float32(WS_np[1:,1:])
    Z=np.full_like(V, Z)
    res.append(np.vstack((X.flat, Y.flat, Z.flat, V.flat)).T)
data=np.concatenate(res, axis=0)
 
values=data[:,3]
 
# создание интерполятора, долго, но его можно подсчитать один раз, 
# сереализировать (pikle) и сохранить в файл, а в дальнейшем читать его из файла.
tri = Delaunay(data[:,0:3])
interp = LinearNDInterpolator(tri, values)
 
point=np.array([[43.5, -7, 500], [43.5, -7, 700] ]) #0.50166
print(interp(point))
# расчет сечений для z=500, 1000, 1500, 2000, 2500 м2
# время расчета для 5 сечений ~ 40 сек
x=np.arange(-5, 49.5, 5) 
y=np.arange(-19.5, 19.5, 5)
z=np.arange(500,3000,500)
X,Y,Z=np.meshgrid(x,y,z)
 
V=interp(X,Y,Z)
А сами формулы расчетов таких таблиц имеются? Может как-то можно ускорить эти расчеты...
Заметил, что данные таблиц симметричны, если это так, то это тоже можно использовать для ускорения в 2 раза.
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
13.04.2023, 12:28  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
вот вариант, но считает интерполянт долго, минуты,
Это разве долго Вот в предыдущей теме , в которой вы мне помогли, мой первоначальный вариант считал часами
Минуты это разве долго)))

"время расчета для 5 сечений ~ 40 сек" - это замечательный результат

Цитата Сообщение от u235 Посмотреть сообщение
А сами формулы расчетов таких таблиц имеются? Может как-то можно ускорить эти расчеты...
Формулы есть (120 листов методичка ), я их пытался сделать (да и не только я, еще с двумя преподами в универе хотел это запрограммировать, но как-то не пошло. Просто в этих формулах запутались и бросили это дело).

Не по теме:

Может быть методичка так написана, может быть нам мозгов не хватило ее понять...



PS Я все таки думаю методичка плохая
Поэтому пришла в голову шальная мысль получить расчеты (какие-то наиболее частные случаи которые мне требуются) и интерполировать. Чем больше смотрю на ваши примеры, тем больше желание изучить эти библиотеки, потому что что я раньше считал невозможным или долгим по времени, оказывается 30-40 строчек кода... Спасибо)
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
13.04.2023, 16:23  [ТС]
u235, не могли бы вы, пожалуйста, в конце вашего кода добавить визуализацию результатов (я так понимаю они находятся в V), что бы можно было наглядно, так сказать посмотреть. Буду очень благодарен

Что-то вроде того (я пока крайне плохо знаком со всеми импортируемыми библиотеками, поэтому даже адаптация нижеприведенного кода вызывает тихий ужас и ступор):

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
 
 
df = pd.read_excel('при 500 м2.xls')
val = df.values[:,1:].T
val[val < 1e-3] = 0.01
plt.figure(figsize=(10,10))
plt.imshow(val, cmap='jet', interpolation = 'bicubic', vmax=0.1)
X, Y = np.meshgrid(range(df.shape[1]), range(df.shape[0]-1))
Z = val
plt.colorbar()
plt.contour(X, Y, Z, sorted([2**(-n) for n in range(10)]))
plt.show()
Миниатюры
Получить данные для промежуточных значений  
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
13.04.2023, 20:53
Лучший ответ Сообщение было отмечено Михалыч как решение

Решение

Михалыч, вот так пойдет?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import numpy as np
import pandas as pd
from scipy.interpolate import LinearNDInterpolator
from scipy.spatial import Delaunay
from matplotlib import pyplot as plt
 
xls_names='при 3000м2.xls','при 1000 м2.xls','при 500 м2.xls'
area=[3000, 1000,500]
res=[]
 
for Z,name in zip(area, xls_names):
    WS = pd.read_excel(name, header=None)
    WS_np = np.array(WS) 
    X=np.float32(WS_np[1:,0])
    Y=np.float32(WS_np[0,1:])
    Y,X=np.meshgrid(Y,X)
    V=np.float32(WS_np[1:,1:])
    Z=np.full_like(V, Z)
    res.append(np.vstack((X.flat, Y.flat, Z.flat, V.flat)).T)
data=np.concatenate(res, axis=0)
values=data[:,3]
 
# создание интерполятора, долго, но его можно подсчитать один раз, 
# сереализировать (pikle) и сохранить в файл, а в дальнейшем читать его из файла.
tri = Delaunay(data[:,0:3])
interp = LinearNDInterpolator(tri, values)
 
# расчет сечений для z=500, 1000, 1500, 2000, 2500, 3000 м2
# время расчета для 5 сечений ~ 40 сек
x=np.arange(-5, 49.5, .5) 
y=np.arange(-19.5, 19.5, .5)
z=np.arange(500,3500,500)
X,Y,Z=np.meshgrid(x,y,z)
V=interp(X,Y,Z) # результат интерполяции
extent=np.min(x), np.max(x), np.min(y), np.max(y)
for section, title in zip(map(np.squeeze, np.dsplit(V, V.shape[-1])), np.nditer(z)):
    plt.figure(figsize=(10,10))
    plt.imshow(section, cmap='jet', interpolation = 'bicubic', vmin=0.01, vmax=0.1, extent=extent)
    plt.colorbar()
    X,Y=np.meshgrid(x,y)
    plt.contour(X, Y, section, np.power(2.0, np.arange(-9,1)))
    plt.title(f'{title}')
    plt.show()
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
14.04.2023, 10:20  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Михалыч, вот так пойдет?
Спасибо большое подойдёт конечно)))

Вопрос: я же правильно понимаю, графики matplotlib получается строит же не по прямым значениям файла например "при 500 м2.xls" (так как там максимальное значение 6400), а приводит их к промежутку vmin=0.01, vmax=0.1 (38 строка вашего кода)?

Добавлено через 2 минуты
Или он просто все что выше vmax=0.1 принимает равным vmax=0.1 и окрашивает темно красным цветом?

Добавлено через 24 минуты
И еще вопрос: правильно ли я понимаю, если данных будет больше скажем не 500,1000, 3000, а скажем с шагом 100, то интерполяция будет более качественной?
0
5516 / 2869 / 571
Регистрация: 07.11.2019
Сообщений: 4,760
14.04.2023, 10:52
Михалыч, да, приводит к промежутку 0.01..0.1, также как и у вас в коде. Темно-красный это то что более 0.1, темно-синий - все что менее 0.01. Я решил, что это может заменить 8-ю строку в вашем коде.
Да, больше данных - точнее промежуточные значения. Вопрос в другом: какая точность будет достаточная.
Можно провести эксперимент и сравнить расчетные и интерполированные данные. Насколько они будут отличаться и критично ли это для вас.
1
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
14.04.2023, 10:55  [ТС]
Цитата Сообщение от u235 Посмотреть сообщение
Можно провести эксперимент и сравнить расчетные и интерполированные данные. Насколько они будут отличаться и критично ли это для вас.
Я так и сделаю Спасибо!)
0
14.04.2023, 11:36

Не по теме:

Хоспаде, когда видишь такие темы после просмотра 10e5 мусорных тем, аж на слезу пробивает...

0
578 / 411 / 69
Регистрация: 09.01.2018
Сообщений: 1,363
15.04.2023, 21:40
Цитата Сообщение от Fudthhh Посмотреть сообщение

Не по теме:

Хоспаде, когда видишь такие темы после просмотра 10e5 мусорных тем, аж на слезу пробивает...


Не по теме:


Люто плюсую!

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
15.04.2023, 21:40
Помогаю со студенческими работами здесь

Вывод промежуточных значений из программы
Добрый вечер, знаю темы поднимались, но мне не помогли. Имею задание https://pp.vk.me/c627326/v627326662/45cb4/carB8n-GAi8.jpg Алгоритм...

Расчет промежуточных значений по неделям
Приветствую, форумчане! Столкнулся с проблемой расчета итоговых недельных значений в отчете, тянущем данные из сводной таблицы. ...

некорректный вывод промежуточных значений
Всем привет.у меня возникла проблема с выводом информации в программе.программа обсчитывает определенный интеграл методом Симпсона.работает...

Нахождение промежуточных значений функции
Задали написать программу для нахождения промежуточных значений функции, заданной в n+1 точках: 1) посредством построения полинома...

Вычисление промежуточных значений функции
Составить программу для вычисления промежуточных значений функции y(x) в произвольной точке x. Значение x изменяется в пределах c шагом...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru