Попытка использовать CoCalc (шалфей) для построения решения функции, требующей модуля - PullRequest
0 голосов
/ 01 декабря 2018

У меня есть следующий код и сообщение об ошибке.Что-то, что я делаю, похоже, портит функцию% в функции hb.Я не совсем уверен, что или как это исправить.Есть идеи?

def h(n):
    if (n % 4 >= 0) and (n % 4 < 1):
            k = 1
    else:
        k = 0
    return k

def hb(n):
    if (((n/4) % 2) >= 0) and (((n/4) % 2) < 1):
        k = -1*h(n)
    else:
        k = h(n)
    return k

def dalembert(y,t):
    x = 0.5*hb(y-t)+0.5*hb(y+t) 
    return x 

import numpy as np

box1 = np.array([1,2,6,10,20])

for i in range(len(box1)):
    g=Graphics()
    g += plot(dalembert(x,box1[i]), (x, 0, 4), color='blue')
    g.show()

Ошибка в строках 18-21 Traceback (последний вызов был последним): Файл "/cocalc/lib/python2.7/site-packages/smc_sagews/sage_server.py", строка 1188, в execute flags = compile_flags) в пространстве имен, файл Localals "", строка 3, в файле "", строка 2, в файле dalembert "", строка 2, в файле hb "sage / structure / element.pyx", строка 1925, в sage.structure.element.Element. mod (build / cythonized / sage / structure / element.c: 13956) return coercion_model.bin_op (left, right, mod) Файл "sage / structure / coerce".pyx ", строка 1182, в файле sage.structure.coerce.CoercionModel_cache_maps.bin_op (build / cythonized / sage / structure / coerce.c: 9827) вернуть файл PyObject_CallObject (op, xy)" sage / Structure / element.pyx ",строка 1923, в sage.structure.element.Element. mod (build / cythonized / sage / structure / element.c: 13921) return (слева). mod (справа) Файл"sage / structure / element.pyx", строка 1958, в sage.structure.element.Element. mod (build / cythonized / sage / structure / element.c: 14242)поднять bin_op_exception ('%', self, other) Ошибка типа: неподдерживаемый родительский (ые) операнд для%: 'Символическое кольцо' и 'Символическое кольцо'

1 Ответ

0 голосов
/ 02 декабря 2018

Попробуйте заменить g += plot(dalembert(x,box1[i]), (x, 0, 4), color='blue') на что-то вроде function d0(y): return dalembert(y,box1[i]); g += plot(d0, (x, 0, 4), color='blue')

Проблема в том, что когда вы пишете dalembert(x,box1[i]) в своем коде, он сначала оценивается, прежде чем даже использовать егов сюжете, и он оценивается с помощью xa символического, который ломает другие вещи ...

...